热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginxweb服务看几番、神奇臭腐,夏裘冬葛

Nginxweb一、Nginx介绍1.1、概述Nginx时一个开源且高性能、可靠的httpweb服务、代理服务开源:直接获取源代码高性能:支持海量开发可靠:服务稳定1.2、Ngin

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)$ {
...
}


推荐阅读
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
author-avatar
自由常飞_337
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有