一 缓存功能
缓存功能可以加速访问,如果没有缓存关闭后端服务器后,图片将无法访问,缓存功能默认关闭,需要开启。
相关选项:
proxy_cache zone_name | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http 必须放在http语句中#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m; #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
实验:为代理服务器开启缓存功能
① 主配置文件的http模块中添加配置
[root@localhost ~]# vim /apps/nginx/conf/nginx.conf #主配置文件
proxy_cache_path /data/nginx/proyxcache levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
#开启缓存 缓存路径 生成文件夹比例是3级 从内存中借调20M专门存放缓存 有效期120秒 最大存储空间为1g
[root@localhost ~]# mkdir /data/nginx/
[root@localhost ~]# nginx -t 注意:路径不存在或者错误
② 子配置文件添加配置
proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;
①如何清理nginx代理服务器缓存
方法1 rm -rf 缓存目录
方法2: 第三方扩展模块ngx_cache_purge
②自定义添加响应报文头部信息
基于可以实现对后端服务器响应给客户端的报文中添加指定的响应首部字段
Syntax: add_header name value [always];
Default;
Context: http,server,location,if in location#添加响应报文的自定义首部:
add_header name value [always];#示例:
add_header X-Via $server_addr; #当前nginx主机的IP
add_header X-Cache $upstream_cache_status; #是否缓存命中
add_header X-Accel $server_name; #客户访问的FQDNadd_header X-Via
add_header X-Cache
add_header X-Accel
实验1:自定义添加响应报文头部信息
add_header X-Via $server_addr; #当前nginx主机ip
add_header X-Cache $upstream_cache_status; #是否缓存命中,hit命中,miss未命中add_header X-Accel $server_name; #客户端访问的FQDN
server {listen 80;server_name www.pc.com;root /data/;proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;add_header ip $server_addr; #当前nginx主机ipadd_header status $upstream_cache_status; #是否缓存命中,hit命中,miss未命中add_header name $server_name; #客户端访问的FQDNlocation ~* /api {proxy_pass http://192.168.190.100;}location ~* \.(jpg|jpeg|png|gif|bmp)$ {proxy_pass http://192.168.190.101;}
}
② 查看新增头部字段信息
二 客户端ip透传
一级代理
在Nginx中,代理客户端IP透传是指将客户端的真实IP地址(也称为远程IP地址)传递给后端服务器。这在一些情况下非常有用,例如,当Nginx作为反向代理服务器时,我们希望后端服务器能够获取到客户端的真实IP地址,而不是Nginx服务器的IP地址。
在代理服务器7-1写配置文件
server{ listen 80; root /data/;server_name www.mcb.com;add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://192.168.11.8;}
}
当前访问192.168.11.9代理服务器跳转的是192.168.11.8后端真实服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部
② 添加后端服务器11.9web文件,开启httpd服务,关闭防火墙,并实时查看访问日志
④ 观察后端服务器11.8新增日志信息
二级代理
实现目标:7-0服务器日志可以查看到客户端ip和反向代理服务器ip。
二 负载均衡
在上一个节中Nginx可以将客户端的请求转发至单台后端服务器,但是无法转发至特定的一组的服务器,而且不能对后端服务器提供相应的服务器状态监测,Nginx可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能。
1 调度算法
1.1轮询算法
默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流提供响应。
3.2 加权轮询算法
在默认轮询的基础上增加权重,weight=number。如果后端有2个服务器其中一个配置权重为weight=5另外一个不配置默认是1,则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为5:1。
最小连接数算法
最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC。按照nginx反向代理服务器和后端服务器的连接数分配请求,连接越少的分配处理请求优先级越高。例如最小连接数(least_conn;)是设置是3,1号后端服务器有2个请求在处理,而后2号后端服务器只有1个请求在处理,则新请求交给后端服务器2。
ip_hash算法
基于客户端IP地址的负载均衡算法。它会根据客户端的IP地址,将该客户端的所有请求都发送到同一个后端服务器上。这样可以保证同一个客户端的所有请求都被发送到同一个后端服务器,从而保证了会话的一致性。
3.5 fair算法
基于后端服务器的负载均衡算法。它会根据后端服务器的响应时间,将请求发送到响应时间最短的服务器上。这样可以保证请求被发送到处理能力最强的服务器上,从而提高系统的性能。