本文主要是介绍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](/upload/202108/16/202108160707393663.png)
二、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](/upload/202108/16/202108160707394756.png)
6.3、基于多域名的方式
# 在/etc/nginx/conf.d/目录下的game.conf配置文件中添加两个server 内容,添加不同的域名地址地址,重启后生效,如下图:
ps: 需要提前在本地hosts文件中添加域名解析
c://windows/system32/etc/hosts中添加
![image](/upload/202108/16/202108160707395738.png)
6.4、基于多端口的方式
# 在/etc/nginx/conf.d/目录下的game.conf配置文件中添加两个server 内容,添加不同的端口,重启后生效,如下图:
![image](/upload/202108/16/202108160707396675.png)
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,所以日志可以分类存储
# 格式:
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服务--------------看几番、神奇臭腐,夏裘冬葛的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!