Nginx的10个使用场景 强化学习
实际场景:虚拟主机、静态站点、反向代理、负载均衡、HTTPS加密传输、文件服务器、限速、限流、黑白名单、请求拦截。
一.概述1。什么是Nginx Nginx是一个高性能的反向代理和Web服务器软件。Nginx因其系统资源消耗低、运行稳定、高性能并发处理能力,在互联网企业中得到了广泛应用。
2.
一个进程处理多个请求 | 一个进程处理一个请求 |
非阻塞式 | 阻塞式 |
直接运行nginx.exe即可2.安装Linuxrpm包安装每分钟转数包下载页:nginx。组织/包/相对湿度…$ rpm-IVH nginx-* .每分钟转数关闭防火墙$ firewall-cmd-zone=public-add-port=80/TCP-permanent $ firewall-cmd-reload
rpm包中已经包含了大量的常用模块,建议以rpm包的形式安装,简单快捷。
3.使用
nginx | 启动 |
nginx -V | 查看当前版本及编译配置信息 |
nginx -t | 检查配置文件语法是否正确 |
nginx -s stop | 直接关闭worker子进程 |
nginx -s quit | 等待worker子进程正确处理完请求后关闭 |
nginx -s reload | 重读配置文件 |
端口可以相同。听8000;server _ name 172 . 17 . 1 . 1;听8000;server _ name 172 . 17 . 1 . 2;# 2:基于多端口的虚拟主机:listen监听不同端口:listen 8001server_name本地主机;听8002;server_name本地主机;#3:基于域名的虚拟主机:端口可以相同,
The server {listens 80; Server_name local host; location/{ root/opt/nginx/html; Index index.html index.htm; }}3. The reverse proxy is that after the user client accesses the proxy server,
4.七层反向代理可以通过在配置文件nginx.conf的http部分写入以下格式的配置,将本地8088端口代理到百度:
Server {listen8088server_name local host; location/{ proxy _ pass; }}5. The four-layer reverse proxy Nginx can proxy the seven-layer traffic of Hypertext Transfer Protocol,
Stream {server} listens 3306; # Visit the local 3306,
转发到远程3306 proxy _ pass 172 . 17 . 0 . 1:3306;}}6.负载均衡当出现高并发、大流量的业务场景时,单台后端服务器已经无法支撑业务的正常运行。
有必要根据某些规则将所请求的流量分配给多个服务节点。即使一个节点出现故障,系统仍然可以正常向外界提供服务,从而提高系统的性能和稳定性。
支持协议图:
7.使用场景描述(1)上游模块
定义上游服务器
upstream | 段名,中间定义上游服务url |
server | 定义上游服务地址 |
zone | 定义共享内存,用于跨worker子进程共享数据 |
keepalive | 对上游服务启用长连接,每个worker子进程与上游服务器空闲长连接的最大数量(keepalive 16; 当同时有5000个请求过来,处理完毕后,会保留16个连接,其他全部关闭) |
keepalive_requests | 一个长连接可以处理的最多请求个数 |
keepalive_timeout | 空闲情况下,一个长连接的超时时长,超过后会销毁长连接 |
hash | 负载均衡算法:哈希 |
ip_hash | 负载均衡算法:依据ip进行哈希计算 |
least_conn | 负载均衡算法:最少连接数 |
least_time | 负载均衡算法:最短响应时间 |
random | 负载均衡算法:随机 |
(2)HTTPS加密传输HTTPS通过加密通道保护客户端与服务器之间的数据传输,已经成为当前网站部署的必要配置。在部署Nginx代理集群的HTTPS站点,
通常SSL证书会部署在Nginx的服务器上,然后请求会委托给后端的上游服务器。在这种部署模式下,Nginx服务器负责SSL请求的计算,相对减少了后端上游服务器的CPU计算。
如果文件太大,将显示为mb或gb autoindex _ exact _ size off#以什么格式:html | xml | json | jsonp #默认值:auto index _ format html auto index _ format html;#显示时间格式#开:2019年7月12日10:11(当前时区)#关:2019年7月12日02:11(0时区,
加大返回数据量更好地看到限速效果return 200 ' request _ time $ request _ time request _ id $ request _ id server _ name $ server _ name request _ filename $ request _ filename document _ root $ document _ root $ root real path _ root $ real path _ root request _ completion $ request _ completion }(5)限流
http { include time . types default _ type应用程序/JSON;# limit _ conn _ zone key zone=name:size # key:用于定义客户端的唯一标识来限速,
Approaching to restrict specific Internet Protocol or network segment access to allowdenyserver {Listen80server _ name local host; Location/{# Allowed address | CIDR | UNIX | All # Default # Context: http, server, location, limit _ exceptallow192.168.0.1/24; # Reject Address | CIDR | UNIX | All # Default # Context: http, server, location, limit _ except deny all}} Example of rule
Location/{#从上到下的规则# deny 192 . 168 . 1 . 1;#释放子网掩码为24位的192.168.1.0网段(255.255.255.0)。
但192.168.1.1除外允许192 . 168 . 1 . 0/24;#释放10.1.1.0网段,
子网掩码16位(255.255.0.0)允许10 . 1 . 1 . 0/16;#发布ipv6允许2001:0db 8:/32;#除了以上发布的内容,
所有其他人拒绝否认所有;}(7)请求拦截
Authentication failure will return the return content auth _ request/auth of authentication service;} location/auth { proxy _ pass; Proxy _ pass _ request _ bodyoffproxy _ set _ header content length'' proxy _ set _ header X-Original-URI $ request _ uri; }8. Detailed explanation of configuration variables (1) Global configuration of main segments
其中属组可以不指定user nginx;# worker_processes NUMBER | auto# 解释:指定nginx启动的worker子进程数量# 【*auto:自动设置为物理CPU核心数】worker_processes auto;# pid DIR# 解释:指定运行nginx的master主进程的pid文件存放路径pid /opt/nginx/logs/nginx.pid;# worker_rlimit_nofile NUMBER# 解释:指定worker子进程可以打开的最大文件句柄数# 【系统最大打开65535,
超时后会转给下一个worker处理请求 accept_mutex_delay 100ms; # worker子进程可以接收的新连接个数(这个参数对性能影响不太大) multi_accept on;}(3)http段
server段server {listen 80; server_name www.test.com; location /picture { root /opt/nginx/html/picture; # 客户端请求www.test.com/picture/1.jpg; # 对应磁盘映射路径为:/opt/nginx/html/picture/picture/1.jpg}location /picture { alias /opt/nginx/html/picture/; # 客户端请求www.test.com/picture/1.jpg; # 对应磁盘映射路径为:/opt/nginx/html/picture/1.jpg # 【末尾一定要加/】}}server_name的匹配规则# 精确匹配,
# 测试样例location ~ /test/8005/t/$ {return 200 'first regular expressions match!';}location ~* /test/8005/t/(\\w+)$ {return 200 'longest regular expressions match!';}location ^~ /test/8005/t/{return 200 'stop regular expressions match!';}location /test/8005/t/Test2 {return 200 'longest prefix string match!';}location /test/8005/t {return 200 'prefix string match!';}location=/test/8005/t {return 200 'exact match!';}root与alias的区别
语法 | root path | alias path |
上下文 | http server location if | location |
区别 | 将定义路径与URI叠加 | 只取定义路径,末尾一定要加“、” |
location末尾带与不带”/”的区别
不带 “/” | location /test | 尝试把test当成目录,如果找不到则找test文件 |
带 ”/” | location /test/ | 将test作为目录,如果不存在则直接返回404 |
location /status {# 监控模块 stub_status;}# ------页面结果------Active connections: 2 server accepts handled requests 16 16 26 Reading: 0 Writing: 1 Waiting: 1
状态项 | 含义 |
Active connections | 当前客户端与Nginx间的TCP连接数,等于下面Reading、Writing、Waiting数量之和 |
accepts | 自Nginx启动起,与客户端建立过的连接总数 |
handled | 自Nginx启动起,处理过的客户端连接总数。如果没有超出worker_connections配置,该值与accepts相同 |
requests | 自Nginx启动起,处理过的客户端请求总数。由于存在HTTP Keep-Alive请求,故requests值会大于handled值 |
Reading | 正在读取HTTP请求头部的连接总数 |
Writing | 正在向客户端发送响应数据的连接总数 |
Waiting | 当前空闲的HTTP Keep-Alive连接总数 |
内嵌变量
变量名 | 含义 |
$connections_active | 同Active connections值 |
$connections_reading | 同Reading值 |
$connections_writing | 同Writing值 |
$connections_waiting | 同waiting值 |
重写URLlocation/{ # 上下文:server, location, if # return code [text]; # text:响应体内容(如果code是200) # return 200 'return 200 HTTP Code'; # return code URL; # URL:重定向 # return 302 /test; # return URL; # URL:直接跟URL的话必须是http/https开头的完整路径 # text:响应体内容 return ;}location /test { index test.html;}location /search { # rewrite regex replacement [flag] # 上下文:server, location, if # flag: # last: 重写后的url发起新请求,
例如HTTP/1.1server_protocol 2、HTTP请求相关变量 #请求包体头。。度conten_length#请求包体类型content_type#URL中某个参数arg_参数名#所有URL参数args#URL中有参数,
时间单位ms:毫秒s:秒m:分钟h:小时d:天w:周M:月y:年空间单位k/K:KBm/M:MBg/G:GBHTTP状态码
分类 | 描述 |
1 | 信息,服务器收到请求,需要请求者继续执行操作 |
2 | 成功,操作被成功接收并处理 |
3 | 重定向,需要进一步的操作以完成请求 |
4 | 客户端错误,请求包含语法错误或无法完成请求 |
5 | 服务器错误,服务器在处理请求的过程中发生了错误 |
100 | 继续。客户端应继续其请求 |
101 | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | 请求成功。一般用于GET与POST请求 |
201 | 已创建。成功请求并创建了新的资源 |
202 | 已接受。已经接受请求,但未处理完成 |
203 | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | 部分内容。服务器成功处理了部分GET请求 |
300 | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | 使用代理。所请求的资源必须通过代理访问 |
306 | 已经被废弃的HTTP状态码 |
307 | 临时重定向。与302类似。使用GET请求重定向 |
400 | 客户端请求的语法错误,服务器无法理解 |
401 | 请求要求用户的身份认证 |
402 | 保留,将来使用 |
403 | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | 客户端请求中的方法被禁止 |
406 | 服务器无法根据客户端请求的内容特性完成请求 |
407 | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | 服务器等待客户端发送的请求时间过长,超时 |
409 | 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | 客户端请求信息的先决条件错误 |
413 | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | 服务器无法处理请求附带的媒体格式 |
416 | 客户端请求的范围无效 |
417 | 服务器无法满足Expect的请求头信息 |
500 | 服务器内部错误,无法完成请求 |
501 | 服务器不支持请求的功能,无法完成请求 |
502 | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | 服务器不支持请求的HTTP协议的版本,无法完成处理 |