Nginx教程

Nginx web服务--------------看几番、神奇臭腐,夏裘冬葛

本文主要是介绍Nginx web服务--------------看几番、神奇臭腐,夏裘冬葛,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Nginx web

一、Nginx介绍

1.1、概述

Nginx时一个开源且高性能、可靠的http web服务、代理服务
开源:直接获取源代码
高性能:支持海量开发
可靠:服务稳定

1.2、Nginx特点

1.2.1、高性能,高并发

nginx支持很高的并发,nginx在处理大量并发的情况下比其他web服务要快

1.2.2、轻量且高扩展性

1.轻量
功能模块少,只保留核心模块,其他代码模块化(易读,便于二次开发,对于开发人员非常友好)
2.高扩展性
根据需要安装模块,并且支持第三方模块

1.2.3、高可靠性

1.其他web服务器需要每隔一段时间重启服务,nginx不需要
2.抗造性强,只要不过分,几乎不会出现问题
3.nginx宕机时间是99999级别

1.2.4、支持热部署

nginx可以在运行期间,更新迭代,部署代码,其他大部分不支持

1.2.5、使用面很广

1.技术成熟,具备的功能是企业最长使用而且最需要的
2.适合当前主流架构趋势,微服务、云架构、中间层
3.统一技术栈,降低维护成本,降低技术更新成本

1.2.6、nginx使用的是Epool网络模型

1.Epool:当用户发起一次请求,Epool模型会直接进行处理,效率高效,无连接限制。
2.Select:当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。apache就是使用此模型

1.2.7、其他web服务

1.apache:最早使用的web服务,难以掌握,性能不高
2.nginx
	1)Tengine:淘宝根据nginx进一步开发得到的服务
	2)openresty:是一个基于 Nginx 与 Lua 的高性能 web 平台
3.Lighttpd:消耗的内存和cpu较低
是一个德国人领导的开源 Web 服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的 Web Server 环境。具有非常低的内存开销,CPU 占用率低,效能好,以及丰富的模块等特点。
4.IIS:windows的web服务
5.GWS:Google web sercer
6.BWS:baidu web server
7.Tomcat
8.Resin
9.weblogic
10.Jboss

1.2.8、Epool介绍

Epool是Linux内核位处理大批量文件描述符二做了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著挺高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

Nginx应用场景

image

二、Nginx安装

安装方式

1.epol源安装
版本较低,安装简单,配置不易读
2.官方源安装
版本较新,安装简单,配置易读
3.源码包安装
版本随意,安装复杂,升级繁琐,规范,便于管理

#三种安装方式都需要安装Nginx运行的依赖环境
yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake wget httpd-tools vim tree

2.1、epol源安装

#   yum -install nginx -y

2.2、官方源安装

1.进入 nginx.org , 右侧选择 documentation ,上部选择 installing nginx ,选择installation on linux 的 packages ,选择RHEL/CentOS版本,选择[nginx-stable]配置文件复制,新建文件添加进去。
然后将此安装源优先级调最高
ps:需要下载priorities
2.安装依赖包解决依赖关系
# yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake httpd-tools openssl openssl-devel zlib-devel

拓展知识:调整安装源优先级

1.安装priorities
yum install yum-priorities
2.确认配置文件是否存在
cat /etc/yum/pluginconf/priorities.conf
[main]
enabled = 1
3. vim /etc/yum.repos.d/*.repo
在每个安装源内容'gpgkey=...*'下方插入'priority=N'  N为1-99,数值越大优先级越低
4.清理安装源缓存
yum clean all
5.重新加载安装源缓存
yum makecache
6.重新下载,安装源优先级别已经调整

#  Third Party Repos such as rpmforge … priority=N   (where N is > 10 and based on your preference)

2.3、源码包安装

1.上传代码包或wget下载代码包
#  rz nginx-1.20.1.tar.gz
2.解压代码包
#  tar xf nginx-1.20.1.tar.gz
3.安装依赖包
#  yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake httpd-tools openssl openssl-devel zlib-devel
4.生成
# cd nginx-1.20.1
## ./configure --prefix=/usr/local/nginx-1.16.1 --user=www --group=www --with-http_addition_module --with-http_auth_request_module
5.编译安装
#  make & make install
6.编辑配置文件
#	vim /usr/local/nginx/conf/nginx.conf
将此文件的pid路径设置为: /run/nginx.pid

7.编辑system的.service文件
# 此文件的作用是使用ststemctl管理nginx,否则无法使用systemctl管理nginx
vim /usr/lib/systemd/system/nginx.sevice

[Unit]
Description=Nginx Service
Before=network.target
After=PHP.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
Killmode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

7.配置完之后关闭掉之后重新打开即可
systemctl status nginx
#查看状态
netstat -tunlp | grep 80
ps -ef | grep nginx
打开浏览器访问
#查看版本
nginx -v
#查看nginx的编译参数
nginx -V
#检查nginx语法是否正确
nginx -t
8.设置自启
systemctl enable nginx
systemctl start nginx

2.4、源码包nginx升级

1.下载或者上传代码包
#  wget http://nginx.org/download/nginx-1.17.8.tar.g
2.解压压缩包
# tar xf nginx-1.17.8.tar.gz
3.生成
# cd nginx-1.17.8
## ./configure --prefix=/usr/local/nginx-1.16.1 --user=www --group=www --with-http_addition_module --with-http_auth_request_module
4.编译安装
make & make install
5.删除软连接
# rm -rf /usr/local/nginx && ln -s /usr/local/nginx-1.17.8 /usr/local/nginx



#nginx添加模块
[root@web01 ~]# cd nginx-1.16.1/
[root@web01 nginx-1.16.1]# ./configure --prefix=/usr/local/nginx-new-1.16.1
--user=www --group=www --with-http_addition_module --with-http_auth_request_module --with-http_mp4_module
# 在以上命令后增加--with-{模块名字}
[root@web01 nginx-1.16.1]# make && make install
[root@web01 nginx-1.16.1]# rm -rf /usr/local/nginx && ln -s /usr/local/nginx-new-1.16.1 /usr/local/nginx

三、Nginx相关文件

主要都是以yum网络源安装的nginx生成的配置文件,源码包安装的nginx只有/usr/local/nginx/conf/nginx.conf这个配置文件

3.1、Nginx主配置文件

路径 类型 作用
/etc/nginx/nginx.conf 配置文件 nginx主配置文件
/etc/nginx/conf.d/default.conf 配置文件 默认网站配置文件

3.2、Nginx代理相关参数文件

路径 类型 作用
/etc/nginx/fastcgi_params 配置文件 Fastcgi代理配置文件
/etc/nginx/scgi_params 配置文件 scgi代理配置文件
/etc/nginx/uwsgi_params 配置文件 uwsgi代理配置文件

3.3、编码配置文件

路径 类型 作用
/etc/nginx/win-utf 配置文件 Nginx编码转换映射文件
/etc/nginx/koi-utf 配置文件 Nginx编码转换映射文件
/etc/nginx/koi-win 配置文件 Nginx编码转换映射文件
/etc/nginx/mime.types 配置文件 Content-Type与扩展名

3.4、Nginx管理相关命令

路径 类型 作用
/usr/sbin/nginx 命令 Nginx命令行管理终端工具
/usr/sbin/nginx-debug 命令 Nginx命令行与终端调试工具

3.5、Nginx日志相关目录与文件

路径 类型 作用
/var/log/nginx 目录 Nginx默认存放日志目录
/etc/logrotate.d/nginx 配置文件 Nginx默认的日志切割

四、配置文件内容

Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。每个区块以一对{}来表示开始与结束

# CoreModule (核心模块)
# EventModule (事件驱动模块)
# HttpCoreModele (http内核模块)

4.1、配置文件内容

cat /etc/nginx/nginx.conf

###### CoreModule (核心模块) ######

#指定启动的用户
user www;
# Nginx的worker进程数量
worker——process 1;
# 指定错误日志存放的路径以及记录的级别
error_log /var/nginx/error.log warn;
# 指定pid文件
pid		/var/run/nginx.pid


###### EventModule(事件驱动模块) ######
events {
	# 每个worker工作进程的最大连接数
	worker——connections 1024;
}


###### HttpCoreModule(http内核模块) ######

http {
	# 包含nginx可识别的文件类型
	include		/etc/nginx.mime.types;
	# 当nginx不识别文件类型的时候,默认下载
	default_type  application/octet-stream;
	# 指定日志格式,日志格式起个名字
	log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
	access_log /var/log/nginx/access.log main;
    # 高效传输
    sendfile	on;
    #tcp_nopush	on;
    
    # 开启长链接
    keep-alive_timeout  65;
    # 开启压缩
    # gzip	on;
    # 包含网站的配置文件
    include  /etc/nginx/conf.d/*.conf
    #一个server表示一个网站
    server {
    listen 80;
    # 网站提供的域名
    server_name  localhost;
    # 字符集
    charset	utf8;
    # 匹配、控制访问的网站站点
    location / {
    root /usr/share/nginx/html;
    # 指定默认访问的页面
    index index.html;   
    }   
  }
}

五、搭建小游戏实践

5.1、编辑配置文件

# /etc/nginx/nginx.conf配置文件中,需要include /etc/nginx/conf.d/*.conf 进行目录位置关联!
#  编辑新的配置文件
vim /etc/nginx/conf.d/game.conf

server {
    listen 80;
    server_name localhost;
    #server_name www.game.com;
 
    location / {
        root /code/tuixiangzi;
        index index.html;
    }
}

5.2、检查配置文件

#   nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#  检查完成

5.3、创建站点目录

 mkdir /code

5.4、上传游戏代码

1.  rz
2. unzip xiaoyouxi.zip

5.5、重载nginx

#   systemctl restart nginx

5.6、访问页面游戏

打开网页访问

六、Nginx虚拟主机

6.1、虚拟主机方式

1.基于多IP的方式
2.基于多端口的方式
3.基于多域名的方式

6.2、基于多IP的方式

#   在/etc/nginx/conf.d/目录下的game.conf配置文件中添加两个server 内容,添加不同的ip地址,重启后生效,如下图:

image

6.3、基于多域名的方式

#   在/etc/nginx/conf.d/目录下的game.conf配置文件中添加两个server 内容,添加不同的域名地址地址,重启后生效,如下图:
ps: 需要提前在本地hosts文件中添加域名解析
c://windows/system32/etc/hosts中添加

image

6.4、基于多端口的方式

#   在/etc/nginx/conf.d/目录下的game.conf配置文件中添加两个server 内容,添加不同的端口,重启后生效,如下图:

image

6.5、server模块介绍

# server模块
server {
    listen       80;			# 监听的端口
    server_name  www.test.com;	 # 监听的域名
    location / {				# 配置访问路径
        root   /usr/share/nginx/html;	# 服务器存放html的地方
        index  index.html index.htm;	# 索引文件
    }
}

七、Nginx日志

Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自单独的访问日志。日志格式通过log_format命令定义格式

ps:nginx运行优先遵循server内配置,在遵循http,所以日志可以分类存储

7.1、log_format语法

# 格式:
log_format   log_json  '....'
语法     日志名称    日志显示格式

7.2、默认日志格式

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
 #  实际输出:
10.0.0.1 - - [27/Nov/2020:09:36:08 +0800] "GET /images/tank.ico HTTP/1.1" 200 25214 "http://www.tank.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36" "-"
 

# 另外一种常用格式

log_format log_json '{ "@timestamp": "$time_local", '
                        '"remote_addr": "$remote_addr", '
                        '"referer": "$http_referer", '
                        '"request": "$request", '
                        '"status": $status, '
                        '"bytes": $body_bytes_sent, '
                        '"agent": "$http_user_agent", '
                        '"x_forwarded": "$http_x_forwarded_for", '
                        '"up_addr": "$upstream_addr",'
                        '"up_host": "$upstream_http_host",'
                        '"up_resp_time": "$upstream_response_time",'
                        '"request_time": "$request_time"'
                    ' }';


#输出格式为:
{ "@timestamp": "11/Aug/2021:19:50:34 +0800", "remote_addr": "172.16.1.61", "referer": "http://www.nginx1.com/", "request": "GET /sounds/stomp.mp3 HTTP/1.1", "status": 404, "bytes": 555, "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", "x_forwarded": "-", "up_addr": "-","up_host": "-","up_resp_time": "-","request_time": "0.000" }

7.3、日志常用变量

$remote_addr	#记录客户端IP地址
$remote_user	#记录客户端用户名
$time_local		#记录通用的本地实践
$time_iso8601	#记录ISO8601标准格式下的本地实践
$request		#记录请求的方法以及请求的http协议
$status			#记录请求状态码(用于定位错误信息)
$body_bytes_sent #发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent		#发送给客户端的总字节数
$msec			#日志写入时间,单位秒,精度是毫秒
$http_referer	#记录从哪个页面链接访问过来的
$http_user_agent #记录客户端浏览器相关信息
$http_x_forwarded_for #记录经过的所有服务器的IP地址
$X-Real-IP		#记录其实的客户端IP地址和上一层客户端的IP地址
$request_length	#请求的长度(包括请求行,请求头和请求正文)
$request_time	#请求花费的实践,单位为秒,精度毫秒
ps:
1.如果nginx位于负载均衡器,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址
2.$remote_addr获取的是反向代理的IP地址,反向代理服务器在转发请求的http头信息中
3.增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址

7.4、修改日志格式

1. #  vim /etc/nginx/nginx.conf
2.在 access_log /var/log/nginx/access.log 上方新增自己设定的日志格式:
# log_format log_json
ps:前面为设定日志固定格式,后面跟日志格式的命名。
log_format log_json '{ "@timestamp": "$time_local", '
                        '"remote_addr": "$remote_addr", '
                        '"referer": "$http_referer", '
                        '"request": "$request", '
                        '"status": $status, '
                        '"bytes": $body_bytes_sent, '
                        '"agent": "$http_user_agent", '
                        '"x_forwarded": "$http_x_forwarded_for", '
                        '"up_addr": "$upstream_addr",'
                        '"up_host": "$upstream_http_host",'
                        '"up_resp_time": "$upstream_response_time",'
                        '"request_time": "$request_time"'
                    ' }';
            
            
3.设定使用哪个日志:
更改'access_log /var/log/nginx/access.log   log_json'
ps:前面是日志生成的路径,后面跟使用哪个日志格式的名字
4.保存退出后重启nginx后生效

7.5、日志切割

#   vim /etc/logrotate.d/nginx

#	指定要切割的日志
/var/log/nginx/*.log {
	daily		#每天切割日志
	missingok	#忽略日志丢失
	rotate 52	#日志保留时间52天
	compress	#日志压缩
	delaycompress #延时压缩
	notifempty	#不切割日志
	create 640 nginx adm #切割后的日志权限
	sharedscipts #开始执行脚本
	postrotate	#标注脚本内容
		if [ -f /var/run/nginx.pid ];then #判断nginx启动
			kill -USR1 `cat /var/run/nginx.pid` #重新生成一个access.log
		fi
	endscript    #脚本执行完毕
}

八、修改压缩类型

1.# vim /etc/nginx/nginx.conf
2.打开 gzip  on; '去掉前面的#就可以'
3.下方新增需要压缩的文件的格式
# 格式可以在/etc/nginx/mime.types里面查看支持的格式,根据自己的需求增加
gzip  on;
    gzip_buffers 16 8k;
    gzip_comp_level 3;
    gzip_disable MSIE [4-6]\.;
    gzip_http_version 1.0;
    gzip_min_length 100;
    gzip_proxied any;
    gzip_types video/mp4 image/png  image/gif image/jpeg  text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/json;
    gzip_vary off;

4.重启后生效

九、Nginx常用模块

Nginx的Modules reference被分为四大类:
1.核心功能(Core functionality)、指令命令列表、和变量列表
2.http模块,都是基于http的功能和操作(模块名字都含有http)
3.邮箱代理模块(模块名字一般都含有mail)
4.stream模块,基于tcp协议的模块(名字都含有stream)
5.还有很多第三方模块可以使用

# 模块的使用
nginx -V查询本机nginx有什么模块。
一般官方源和epol源有比较完善的模块,源码包安装需要手动添加模块

源码包添加模块操作指南

1.官方下载模块包,放入源码包编译目录下
2.查看已编译的模块包含哪些
3.重新编译,将原有的模块和新的模块一起重新编译(只要make一下,不要执行make install,会被覆盖!)
4.替换二进制文件
#   cp /usr/local/src/nginx-1.8.1/objs/nginx /usr/local/nginx/sbin/nginx
5.检查以及平滑启动nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx(做软链,添加到环境变量)

nginx -t (检测配置文件)

nginx -s reload (平滑重启)

9.1、目录索引模块

#  模块名:ngx_http_autoindex_module
介绍:
ngx_http_autoindex_module模块处理以斜杠字符'/'结尾的请求,并生成目录列表
当ngx_http_autoindex_module模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module模块

9.1.1、语法

# 常规使用:
Syntax:autoindex on | off
Default:  autoindex off
Context:  http,server,location

# 参数:
# 显示文档的大小,默认是on,不添加也会显示
#默认显示字节大小,配置为off后,显示具体的M/G/K
autoindex_exac_size off;
# 显示文件的具体修改时间,默认显示的时间与真实时间相差8小时,所以配置on。
autoindex_localtime on;
# 显示的格式默认html,无需更改可以不做添加这个模块
autoindex_format html;
ps:autoindex_format格式有:html、json、jsonp...格式可以选择

9.1.2、配置

vim /etc/nginx/conf.d/autoindex.conf
	server {
	listen 80;
	server_name www.nginx8.com;
	
	location / {
	root /etc;
    index index.html;
    autoindex on;
	}
}
# 增加参数:
server {
        listen 80;
        server_name www.nginx8.com;

        location / {
                root /etc;
                index index.html;
                autoindex on;
                autoindex_exact_size on;
                autoindex_format html;
                autoindex_localtime on;
        }
}

9.2、访问控制模块

限制IP访问,可以有效防止恶意攻击
# 需要模块: ngx_http_access_module

9.2.1、语法

# 允许访问的语法:
Syntax:allow address | all;
Default:  无
Context:http,server,location,limit_excpet;

#拒绝访问的语法:
Syntax:deny address | all
Default : 无
Context:http,server,location,limit_except;

# 如果配置了允许访问,必须配置拒绝访问。拒绝访问配置可以单独设置。

9.2.2、配置访问控制

# 拒绝指定IP,其他全部允许
# vim /etc/nginx/conf.d/www.autoindex.com.conf 
server {
    listen 80;
    server_name www.autoindex.com;
    charset utf8;
 
    location / {
        root /code/autoindex;
        index index.html;
    }
    location /download {
        root /code/autoindex;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        deny 10.0.0.1;
        allow all;
    }
}

#只允许指定IP,其他全部拒绝
[root@web01 ~]# vim /etc/nginx/conf.d/www.autoindex.com.conf 
server {
    listen 80;
    server_name www.autoindex.com;
    charset utf8;
 
    location / {
        root /code/autoindex;
        index index.html;
    }
 
    location /download {
        root /code/autoindex;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        allow 10.0.0.1;
        #如果使用all,一定放在最后面
        deny all;
    }
}

9.3、Nginx访问认证模块

开启了网站访问输入账号密码的功能
# 需要的模块  ngx_http_auth_basic_module

9.3.1、语法

#开启登录认证
Syntax:auth_basic string | off
Default: auth_basic off
Contex:http,server,location,limit_except
#指定登录用的用户名密码文件
Syntax:auth_basic_user_file filename;
Default: 无
Context:http,server,location,limit_except

9.3.2、创建密码文件

# 创建密码文件需要用到: htpasswd (x)
# htpasswd -c /etc/nginx/auth_basic hjd
执行完命令后输入创建的密码即可。
# 添加用户
htpasswd /etc/nginx/auth_basic jdh

9.3.3、配置访问登录

server {
        listen 80;
        server_name www.nginx8.com;

        location / {
                root /etc;
                autoindex on;
                auth_basic "11111";
                auth_basic_user_file /etc/nginx/auth_basic;
        }
}
# 网页输入:www.nginx8.com查看

9.4、Nginx状态监控模块

# 需要的模块:ngx_http_stub_status_module
ngx_http_stub_status_module模块提供对nginx基本状态信息的访问。默认情况下不构建此模块,应使用--with-http_stub_status_module配置参数启用

9.4.1、语法

Syntax:stub_status;
Default: 无
Context: server,location

9.4.2、配置

server {
        listen 80;
        server_name www.nginx8.com;

        location / {
                root /tmp;
                autoindex on;
                auth_basic "11111";
                auth_basic_user_file /etc/nginx/auth_basic;
        }
        location /status {
        stub_status;
   }
}
# 网页输入:www.nginx8.com/status查看

9.4.3、显示详情介绍

# nginx七种状态
Active connections:2
sever accepts handled requests
       2       2         2
Reading:0 Wrinting:1 Waiting:1

Active connections  #活跃的连接数
accepts			#TCP连接总数
handled			#成功的请求数
requests		#成功的请求书
Reading			#读取的请求头
Writing			#响应
Waiting			#等待的请求书,开启了keepalive

#注意,一次TCP的连接,可以发起多次http请求,下面参数进行验证
keepalive_timeout  0;类似于关闭长链接
keepalive_timeout  65;最大65s没有活动则断开

9.5、连接限制模块

# 需要模块:ngx_http_limit_conn_module
设置共享内存区域最大允许连接数,如果超过此限制,服务器会返回错误。可以防止高频率访问服务器,对服务器产生压力,也防止了攻击

9.5.1、语法

# 定义
Syntax:limit_conn_zone key  zone=name:size;
Default: 无
Context: http
# 调用
Syntax:limit_conn zone number;
Default: 无
Context: http,server,location

9.5.2、配置

# 定义
limit_conn_zone $remote_addr zone=conn_zone:1m;
# 调用
limit_conn conn_zone 1;
# 设置共享内存区域和设置最大允许连接数,当超过此限制时,服务器将返回 错误 以回复请求。

limit_conn_zone $remote_addr zone=conn_zone:1m;
server {
        listen 80;
        server_name www.nginx8.com;

        location / {
                root /tmp;
                autoindex on;
                auth_basic "11111";
                auth_basic_user_file /etc/nginx/auth_basic;
                limit_conn conn_zone 1;
        }
        location /status {
        stub_status;
   }
}

9.6、请求限制模块

可以设置在单位时间内访问的次数,同样起到了防止恶意攻击服务器,给服务器造成负担的情况
#  需要模块ngx_http_limit_req_module

9.6.1、语法

# 定义:
Syntax:limit_req_zone  key  zone=name:size rate=rate;
Default: 无
Context: http
# 调用:
Syntax:limit_req zone=name[burst=number] [nodelay | delay=number];
Default: 无
Context: http,server,location

9.6.2、配置

# 遵循先定义后调用
limit_conn_zone $remote_addr zone=conn_zone:1m;
limit_req_zone $remote_addr zone=req_zone:1m rate=1r/s;

server {
        listen 80;
        server_name www.nginx8.com;

        location / {
        root /code;
        limit_conn conn_zone 1;
        limit_req zone=req_zone;
        limit_req_status 412;
        index index.html;
        }
        location = /status {
        stub_status;
	}
}

十、Location配置

10.1、介绍

location是Nginx中的块级指令(block directive),location指令的功能是用来匹配不同的 URL 请求,进而对请求做不同的处理和响应,着其中较难理解的是多个location的匹配顺序
location:地址定向,数据缓存,应答控制,以及第三方模块的配置

10.2、语法

Syntax:location [ = | ~ | ~* | ^~ ] url {...} 
location @name {...}
Context: server , location

10.3、location匹配符

匹配符 匹配规则 优先级
= 用于标准URI前,要求请求字符串与其精确匹配,成功立即处理,停止搜索其他匹配 1
^~ 以某个字符串开头,域名后面第一个url,匹配到后立即处理,不在匹配其他,一般用来匹配目录 2
~ 用于则很难规则URI前,表示URI包含正则表达式,区分大小写 3
~* 用于则很难规则URI前,表示URI包含正则表达式,不区分大小写 3
/ 通用匹配从头开始匹配 4
@ 定义一个命名的location,一般用于内部定向,例如error_page,它的功能类似于编程中的goto
!~ 区分大小写不匹配的正则(基本不用,优先级在 / 之前)
!~* 不区分大小写不匹配的正则(基本不用,优先级在 / 之前,区分大小写之后)

10.4、location应用场景

# 通用匹配,任何请求都会匹配到
location / {
....
}
# 严格区分大小写,匹配以.php结尾的都走这个location
location ~ \.php$ {
...
}
#不区分大小写,匹配到.jsp$结尾的都走这个location
location ~* \.(jsp|gif|png|js|css)$ {
...
}
这篇关于Nginx web服务--------------看几番、神奇臭腐,夏裘冬葛的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!