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; # 缓冲区请求头部的大小,一般情况不会超过32k proxy_buffering on; # 打开以后可以频繁的减少IO proxy_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 proxy_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 uri args: 以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很小的时候,可能会导致文件描述符耗尽情况。