Nginx-实践篇
Nginx-实践篇
一、静态资源WEB服务:
- 客户端→(REQ:jpeg、html、flv)→Nginx→静态文件
1、静态资源类型:
-
非服务器动态运行生成的文件
类型 种类 浏览器端渲染 HTML、CSS、JS 图片 JPEG、GIF、PNG 视频 FLV、MPEG 文件 TXT、等任意下载文件
2、静态资源服务场景-CDN(内容分发网络):
CDN起到作用就是传输延迟的最小化,举个栗子:

3、配置语法
配置语法—文件读取:
- 语法:
- Syntax: sendfile on | off;
- Default:sendfile off;
- Context:http,server, location, if in location
- 引读:—with-file-aio 异步文件读取
配置语法—tcp_nopush:
- 语法:
- Syntax:tcp_nopush on |off;
- Default: tcp_nopush off;
- Context: http, server , location
- 作用:
sendfile开启的情况下,提高网络包的传输效率。
配置语法—tcp_nodelay:
- 语法:
- Syntax: tcp_nodelay on |off;
- Default: tcp_nodelay on;
- Context: http, server , location
- 作用:
keepalive连接下,提高网络包的传输实时性。
配置语法—压缩:
-
语法:
- Syntax: gzip on | off;
- Default: gzip off;
- Context: http, server ,location, if in location
-
作用:
压缩传输。 -
图解:

配置语法—压缩比:
- 语法:
- Syntax: gzip _comp_level level;
- Default: gzip_comp_level 1;
- Context: http, server , location
配置语法—控制压缩版本:
- 语法:
- Syntax: gzip_http_version 1.0| 1.1;
- Default: gzip_http_version 1,1;
- Context:http, server ,location
扩展Nginx压缩模块:
- http_gzip_static_modile-预读gzip功能
- http_gunzip_module - 应用支持gunzip的压缩方式
- 视频观看到3-5 07.55 刚配置完txt的文件
创建一个static_conf.conf文件,进行静态文件的配置:
server {listen 80;server_name 192.168.37.129;sendfile on;#charset koi8-r;access_log /var/log/nginx/log/static_access.log;location ~ .*\.(jpg|gif|png)$ { # 以图片类型结尾的url 就从下面查找gzip on;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;root /opt/app/code/images;}location ~ .*\.(txt|xml)$ { # 如果以为txt文件或者xml结尾的url,就从下面找gzip off;gzip_http_version 1.1;gzip_comp_level 1;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;root /opt/app/code/doc;}location ~ ^/download { # 以为download开头的url,就从下面查找gzip_static on; # 下载文件tcp_nopush on;root /opt/app/code;}
}
首先举个图片压缩的栗子:
-
把所有的static_conf.conf 文件都关掉,请求/opt/app/code/images/里面有个python.jpg的图片(这个目录是我创建好的)
-
通过servername 进行访问 127.0.0.1/python.jpg
- 点击浏览器
开发者工具点击Network可以看到这次请求的大小Size
- 点击浏览器
-
配置:
-
把
gzip on;打开location ~ .*\.(jpg|gif|png)$ {gzip on; # 打开图片压缩配置项gzip_http_version 1.1; # 压缩的版本gzip_comp_level 2; # 压缩的级别gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;root /opt/app/code/images; # 目录}
-
-
清除浏览器缓存再次访问,127.0.0.1/python.jpg,打开开发者工具种的Netwrok可以看到请求的Size多少
举个文本文件压缩的栗子:
-
步骤同上:
-
配置:
-
把
gzip on:打开location ~ .*\.(txt|xml)$ {gzip on; # 表示把文本文件打开了gzip_http_version 1.1; # 版本号gzip_comp_level 2; # 压缩等级gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;root /opt/app/code/doc; # 再该目录下创建一个.txt或者.xml文件 }
-
-
清除浏览器缓存继续访问:127.0.0.1/log.txt, 打开浏览器开发者工具Network,观察Size,跟没压缩的时候对比,文本文件还是明现的。
4、浏览器缓存:
- HTTP协议定义的缓存机制(如:Expires; Cache-control等),客户端可以直接从本地读取到,不去大量的访问服务器,减轻服务器的压力。
一、浏览器无缓存:

二、客户端有缓存:

- 如果该缓存没有过期的话, 不需要客户端再去请求服务器进行呈现。
三、校验过期机制:
| 校验是否过期 | Expires(请求头1.0版本)、Cache-Control(max-age)(请求头1.1版本) |
|---|---|
| 协议中Etag头信息校验 | Etag(本地缓存失效,请求服务器)-后面携带字符串作为标识 |
| Last-Modified头信息校验 | Last-Modified(本地缓存失效,请求服务器)-后面携带具体时间 |

四、配置语法 - expires:
-
添加Cache-Control、Expires头
- Syntax:expires [modified] time;
- Default: expires off;
- Context: http, server , location, if in location
-
当再次请求服务器的时候,会发现
Status Code:304 Not Modified:说明该请求是从缓存中读取,也会发现Request Headers里面多出个Cache-Control: max-age=0或者max-age<0:意思就是每一次请求都去服务器进行校验,是否有更新,如果有更新返回200,如果没有更新就返回304。 -
把配置项打开,栗子如下:
location ~ .*\.(htm|html)$ {expires 24h;root /opt/app/code;}- 会发现再
Response Headers里面多出了Cache-Control: max-age=86400,过期时间, 24小时。
- 会发现再
5、跨域访问:
一、跨域概念:
-
举个栗子:

- 浏览器访问a.com的时候,再a.com的页面中通过
ajax去访问了,b.com,形成了跨域的请求,容易引起csrf(跨站性)攻击。
- 浏览器访问a.com的时候,再a.com的页面中通过
二、Nginx基本设置跨站请求:
-
语法:
- Syntax: add_header name value [always];
- Default: -
- Context: http, server ,location, if in location
- 浏览器请求的时候会判断
response头中:Access-Control-Allow-Origin
-
举个栗子:
-
再nginx.conf 配置项里面打开:
location ~ .*\.(htm|html)$ {add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;#expires 24h;root /opt/app/code;} -
add_header Access-Control-Allow-Origin wwww.xxx.com的意思是指允许www.xxx.com的域名进行跨域请求。 -
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS的意思是指请求的方法。 -
add_header Access-Control-Allow-Origin *,*代表的是允许所有网站跨域请求,这种做法是不安全的。
-
6、Nginx防盗链:
一、目的:
- 防止
网站资源被占用。
二、防盗链设置思路:
* 首要方式:区别哪些请求是非正常的用户请求。
三、基于http_refer防盗链配置模块:
-
语法:
-
举个栗子:
location ~ .*\.(jpg|gif|png)$ {gzip on;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;# 下面就是nginx防盗链的配置valid_referers none blocked 192.168.27.139/python.jpg ~wei\.png;if ($invalid_referer) {return 403;}root /opt/app/code/images;}- valid_referers: 表示允许哪些信息访问。
- none:表示没有带referers信息的访问。
- blocked:表示一些不需要带
http://这样访问,可以是一些非这样的请求。
-
可以通过
curl -I 192.168.27.139/python.jpg来查看返回的响应头信息。
-
二、代理服务:
-
图解一下代理的过程:

-
图解一下代理服务:

1、HTTP代理:
一、正向代理:
-
图解一下:

-
举个栗子:
-
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
-
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。 -
总体来说:
- 正向代理 是一个位于
客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
- 正向代理 是一个位于
-
正向代理的用途:
- (1)访问原来无法访问的资源,如google。
- (2) 可以做缓存,加速访问资源 。
- (3)对客户端访问授权,上网进行认证 。
- (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息 。
-
二、反向代理:
-
图解一下:

-
概念:
- 反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
-
总体来说:
- 客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问 。
-
反向代理作用:
-
(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击 。
-
大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
-
图解如下:

-
-
(2)负载均衡,通过反向代理服务器来优化网站的负载。
-
图解如下:

-
-
三、代理区别:
- 区别在于代理
对象不一样。 正向代理:代理的对象是客户端。方向代理:代理的是服务端。
四、配置语法:
-
语法:
Syntax:proxy_pass URL;- Default:-
- Context:location, if in location, limit_except
URL:支持http 或 https协议,也支持Socket方式
-
查看nginx这个进程, 所启用的端口命令
netstat -luntp | grep nginx -
举个栗子:
server {listen 80;server_name localhost; # #charset koi8-r;access_log /var/log/nginx/test_proxy.access.log main;location / {root /usr/share/nginx/html;index index.html index.htm;}location ~ /test_proxy.html$ { proxy_pass http://127.0.0.1:8080;}-
外网只能访问
127.0.0.1:80/test_proxy.html的时候, 通过proxy_pass方向代理到8080端口,如下。server {listen 8080;server_name localhost;#charset koi8-r;access_log /var/log/nginx/server.access.log main;location / {root /opt/app/code2;index index.html index.htm;}
-
五、其他配置语法:
缓冲区:
- 语法:
- Syntax: proxy_buffering on | off ;
- Default : proxy_buffering on;
- Context: http,server , location
- 扩展:
proxy_buffer_size 、 proxy_buffers、proxy_busy_buffers_size
- 优点:
- 打开会减少IO的访问, 存储再内存中,当内存不够,就会存储到相对应的硬盘中。
跳转重定向:
- 语法:
- Syntax: proxy_rediect default;
- proxy_redirect off ; proxy_redirect redirect replacement;
- Defalut: proxy_redirect defalut;
- Context: http, server , location
- 使用场景:
- 当用Nginx代理服务器,代理后端返回
301重定向地址的时候,他会把请求重定向到别的地址中。 - 当后端返回的301状态地址的时候,前端用不到这个地址, 这时候Nginx这个参数就有了作用,可以重写,一般情况下都是默认。
- 当用Nginx代理服务器,代理后端返回
头信息:
- 语法:
- Syntax: proxy_set_header field value;
- Default:
- proxy_set_header Host $proxy_host;
- proxy_set_header Connection clost;
- Context: http, server ,location ;
- 扩展:
proxy_hide_header、proxy_set_body
超时:
- 语法:
- Syntax: proxy_connect_timeout time;
- Default: proxy_connect_timeout 60s;
- Context: http,server ,location
- Nginx超时作为代理带后端连接的超时。
- 扩展:
proxy_read_timeout、proxy_send_timeout- read_timeout: 已经建立好了连接了,服务器接收请求,到处理请求的这段时间超时。
- send_timeout: 服务端请求完了, 再发送给客户端的时候超时。
六、代理服务—配置和规范:
-
举个栗子:
location / {proxy_pass localhost; # 必须要的跳转配置proxy_redirect default; # 默认default:后端返回301 就需要这个进行改写 proxy_set_header Host $http_host; # 请求后端接口的时候,添加的请求头信息 添加HOST头信息proxy_set_header X-Real-IP $remote_addr; # 把真实的IP信息带到前端去proxy_connect_timeout 30; # TCP请求连接超时的限制proxy_send_timeout 60; proxy_read_timeout 60;proxy_buffer_size 32k; # 缓冲区请求头部的大小,一般情况不会超过32kproxy_buffering on; # 打开以后可以频繁的减少IOproxy_buffers 4 128k; # 设置buffer的大小proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k; # 如果文件过大,会存储到临时的文件中# --http-proxy-temp-path=/var/lib/nginx/proxy 缓冲区临时文件的存储位置 } -
如果每个配置项都是相同的,可以把每个配置项放到一个文件里面:
-
举个栗子, 把上面的那些location里面的配置项都放到一个文件里,不必配置一个location就需要写一堆配置:
location / {proxy_pass localhost; # 必须要的跳转配置include proxy_params; # 再当前文件所在目录中创建一个文件 叫proxy_params 里面放上面的配置项 }
-
三、负载均衡调度器SLB:
1、Nginx负载均衡:
-
首先客户端大量请求服务器的时候,会造成大量的并发,导致服务器没有办法及时的返回数据,这时候用Nignx来做负载均衡,可以配置多台服务器,当服务器1宕掉了,服务器2也可以进行访问,让服务的高可用,能够更满足业务的需求。
-
图解:

一、基于LVS的中间件架构:
GSLB(全局性的负载均衡):
-
图解:

-
概念:
- GSLB:范围比较广,地域的划分基本上都是以国家,或者省份为单位。
SLB:
-
图解:

-
往往调度节点跟服务节点都在一个地域里面。
2、四层负载均衡和七层负载均衡:
四层负载均衡
- 客户端→(Layer4)→服务端
- 所谓的四层负载均衡,就是再
OSI模型里面传输层,传输层能支持到T4P IP协议的控制,所以只需要对客户端的请求,进行T4p IP协议的包转发。 - 优点:
- 简单、快速、不需要太复杂的逻辑
- 所谓的四层负载均衡,就是再
七层负载均衡
- 客户端→(Layr7{TCP/IP})→服务端
- 处理应用层,如:http信息
- 优点:
- 能完成很多应用方面的请求, 能实现头信息的改写,安全应用的控制。
2、Nginx负载均衡实现原理:
-
客户端通过→Nginx(proxy_pass) →转发到一组虚拟的服务池(upstream server)→upstream server(可以定义很多服务器的单元进行轮询请求) -
图解:

3、Nginx负载均衡配置语法:
一、基本配置语法:
-
语法:
- Syntax:upstream name {…}
- Default:—
- Context:http
注意:配置项的位置,必须再server层以外
-
首先我有2台服务器:
-
IP地址分别为:
- 192.168.37.129(被负载的服务器) A服务器
- 192.168.65.197 (客户端访问这个IP地址)B服务器
-
首先再A服务器上面,创建配置文件:
-
创建第一个配置项, server1.conf:
server {listen 8001;server_name localhost;#charset koi8-r;access_log /var/log/nginx/log/server1.access.log;location / {root /opt/app/code1; # 路径下面有对应的文件 index.html index index.html index.htm;} } -
再创建第二个配置项, server2.conf
server {listen 8002;server_name localhost;#charset koi8-r;access_log /var/log/nginx/log/server1.access.log;location / {root /opt/app/code2; # 路径下面有对应的文件 index.html index index.html index.htm;} } -
再创建第三个配置项,server3.conf
server {listen 8003;server_name localhost;#charset koi8-r;access_log /var/log/nginx/log/server1.access.log;location / {root /opt/app/code3; # 路径下面有对应的文件 index.html index index.html index.htm;} } -
会发现就是端口不一样, 访问的静态资源路径也是不一样的
-
-
再B服务器上修改Nginx配置项:
-
打开nginx.conf 主配置文件:
# 首次按tomcat_server 必须跟下面的 location / {} 里面的 proxy_pass http:// `tomcat_server` 名字是一样的 upstream tomcat_server {#设定负载均衡的服务器列表server 192.168.37.129:8001; # 就是A服务器上面的启动的8001端口server 192.168.37.129:8002; # 就是A服务器上面的启动的8002端口server 192.168.37.129:8003; # 就是A服务器上面的启动的8003端口}server {listen 80; # B服务器的端口server_name localhost; # B服务器的IP地址#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_buffering off;proxy_pass http://tomcat_server;root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;} }
-
-
访问过程:
-
首先配置完Nginx的配置项:
-
第一步.nginx -t : 检查Nginx 配置文件是否正确:
-
如果出现, 那恭喜你配置成功:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful -
如果出现报错信息, 去相对应的行号寻找就好。
-
-
第二步.nginx -s reload : 平缓的重启Nginx服务器
-
-
访问B服务器的IP地址,我这里设置的B服务器IP地址是 localhost 端口是80.
-
就会反向代理到A服务器上, 去轮询的请求 A服务器的8001端口,8002端口,8003端口。
-
这就实现了Nginx的负载均衡,可以让服务器高可用性更强,处理大量的并发事件更容易些,性能更快一些。
-
-
如果您不知道访问的哪个端口,无法做明现的判断:
-
再A服务器上的server.conf配置项中:
root /opt/app/code1; # 路径下面有对应的文件 index.html index index.html index.htm; -
再/opt/app/code1/目录下,创建一个 index.html 文件
-
文件内容如下:
<html> <head><meta charset="utf-8"><title>server3</title> </head> <body style="background-color:green;"><h1>Server 3<h1> </body> </html> -
再8002, 8003 端口都配置相同的文件,加以区分。
-
-
二、Upstream举例:
-
upstream 举例:
upstream backend { # backend: 组的名字server upstream backend1.example.com weight=5; # 可以支持ip的写法,也支持域名的方式server upstream backend2.example.com:8080;server unix:/tmp/backend3; # 也可以支持socket 的方式来写server backup1.example.com:8080 backup; # backup 表示是备份的节点 server backup2.example.com:8080 backup; # weight 表示是权重节点,对于轮询方式而言,参数越大,轮询到的概率越大 }
三、服务器再负载均衡调度中的状态:
| down | 当前的server暂时不参与负载均衡 |
|---|---|
| backup | 预备的备份服务器 |
| max_fails | 允许请求失败的次数 |
| fail_timeout | 经过max_fails失败后,服务暂停的时间 |
| max_conns | 限制最大的接收连接数 |
upstream tomcat_server {server 192.168.37.129:8001 down;server 192.168.37.129:8002 backup;server 192.168.37.129:8003 max_fails=1 fail_timeout=10s; }
四、Nginx调度算法:
| 轮询 | 按时间顺序逐一分配到不同的后端服务器 |
|---|---|
| 加权轮询 | weight值越大,分配到的访问几率越大 |
| ip_hash | 每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器 |
| url_hash | 按照访问的URL的hash结果分配请求,是每个URL定向到同一个后端服务器 |
| least_conn | 最少链接数,那个机器链接数少就分发 |
| hash关键数值 | hash自定义的key |
-
加权轮询:
upstream tomcat_server {server 192.168.37.129:8001;server 192.168.37.129:8002 weight=5;server 192.168.37.129:8003; }- 假如有7个请求,8002端口会接收到5个请求。
- 总结:加权轮询跟轮询都是
基于请求来进行分配如果不想依赖请求的话,想把cookie和seesion的信息进行保存一致,要不然用户再请求页面的时候,访问不同的服务区,会导致一些重新登录的场景,可以用下面的方法ip_hash。
-
ip_hash:
upstream tomcat_server {ip_hash;server 192.168.37.129:8001;server 192.168.37.129:8002;server 192.168.37.129:8003; }- 每个用户登入的时候,带过来的IP地址,都会绑定到一台服务器上,下次访问的时候还会访问该服务器。
- 缺陷:
- 如果客户端用代理的方式来进行访问,而不是真是的IP地址,这样ip_hash作用就没有那么大了。
-
url_hash配置语法:
- Syntax: hash key [consistent];
- Default:—
- Context:upstream
- 版本适用于1.7.2以后才推出的
四、动态缓存:
1、缓存类型:
- 首先用到缓存就是为了减少后端服务器的压力,让所有的请求最好都集中到前端就能请求到数据。
分为:
一:客户端缓存
二:代理缓存
三、服务端缓存
客户端(客户端缓存)→Nginx(代理缓存)→服务端(服务端缓存)
2、代理缓存Nginx:

- 1:当客户端请求Nginx代理的时候,Nginx本地没有缓存。
- 2:Nginx就需要去请求服务层。
- 3:拿到的数据保存到Nginx本地。
- 4:把响应返回给客户端。
- 1:客户端再次请求服务端的时候,通过Nginx代理的时候,Nginx本地有从服务端拿到的数据,缓存了本地。
- 2:把Nginx缓存本地的数据,直接返回给客户端,就不需要去请求服务层。
3、缓存服务核心的配置(proxy_cache):
- 配置语法:
- Syntax:proxy_cache_path path [levels=levels]
- Default:—
- Context:http
- 定义好path后:
- Syntax:proxy_cache zone | off;
- Default:proxy_cache off;
- Context:http,server, location;
- 缓存过期周期:
- Syntax:proxy_cahe_vaild [code…] time;
- Default:—
- Context:http,server, location
- 缓存的维度:
- Syntax:proxy_cache_key string;
- Default:proxy_cache_key s c h e m e scheme schemeproxy_host$request_uri;
- Context: http,server,location
4、Nginx作为缓存服务的场景配置:
upstream tomcat {server 116.62.103.228:8001;server 116.62.103.228:8002;server 116.62.103.228:8003;}proxy_cache_path /opt/app/cache levels=1:2 keys_zone=fe_cow:10m max_size=10g inactive=60m use_temp_path=off;server {listen 80;server_name localhost;#charset koi8-r;access_log /var/log/nginx/test_proxy.access.log main;location / {proxy_cache off;proxy_pass http://tomcat;proxy_cache_valid 200 304 12h;proxy_cache_valid any 10m;proxy_cache_key $host$uri$is_args$args;add_header Nginx-Cache "$upstream_cache_status"; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;include proxy_params;}
- proxy_cache_path:是配置代理缓存最先配置的。
- /opt/app/cache:存放缓存的临时文件的。
- levels=1:2:将目录进行分级,一般建议就是这么写,按照2层的目录进行分级。
- keys_zone=fe_cow:开辟zone空间的名字,相当于key:
- 跟location 里面的proxy_cache:fe_cow ; 一样
- :10m:开辟zone空间的大小,m表示的是兆。
- max_size=10g:表示控制这个目录(/opt/app/cache)最大是多大。
- 为了避免不让他无限的增长,导致把系统的磁盘占满。
- inactive=60m:表示再60分钟之内没有访问该文件,就会被清理掉。
- use_temp_path=off:用来存放临时文件的.
- proxy_cache off; 表示已经关闭了 缓存。
- proxy_cache_valid 200 304 12h; :表示响应头信息是200或者是304的信息时,它的过期时间时12个小时过期。
- proxy_cache_valid any 10m;:除了200或者304状态的信息, 过期时间时10分钟以后过期。
- proxy_cache_key h o s t host hosturi i s a r g s is_args isargsargs: 以host 跟uri 还有is_args跟 args的维度,把这些参数加起来作为Key。
- add_header Nginx-Cache “$upstream_cache_status”; :返回给客户端时候,增加一个头的信息。
- proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
- 如果后端服务器返回的状态时500,502,503,504的错误信息的时候,就会跳过后端代理的这台服务器。
5、如何让部分页面不缓存:
-
语法:
- Syntax:proxy_no_cache string;
- Default:—
- Context:http,server,location
if ($request_uri ~ ^/(url3|login|register|password\/reset)){ # 请求uri中url3|login|register..... 这些地址的时候,是不需要带缓存的set $cookie_nocache 1; # 打开设置不带缓存} location / {proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; }- proxy_no_cache:不设置缓存配置项
- $cookie_nocache:变量名字
6、大文件分片请求:
-
再1.9版本以后出现了 对于大文件来说分片请求的功能。
-
配置语法:
- Syntax:slice size;
- Default:slice 0;
- Context:http,server,location
-
图解:

-
优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其它请求不受影响。
-
缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽情况。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
