一、基于nginx将客户端请求反向代理至后端服务器:
1、proxy_pass指令只能用于location上下文:
- proxy_pass 后面的路径不带URI时,将会把location的URI传递给后端主机,如location /img/ {
proxy_pass http://172.18.224.101;
}
客户端请求的URL被这个location匹配时,请求的资源为后端服务器172.18.224.101/img/
b.proxy_pass 后面是一个URI时,将会把location的URI替换掉,如
如location /img/ {
proxy_pass http://172.18.224.101/bbs/;
}
客户端请求的URL被这个location匹配时,请求的资源为后端服务器172.18.224.101/bbs/
c.如果location定义时使用了正则表达式匹配时,proxy_pass后面不能使用URI,否则将被认定为语法错误:
location ~|~* PATTERN {
proxy_pass http:172.18.224.101;
}
2、proxy_set_header filed value;
使用proxy_pass反向代理后,后端资源服务器日志默认记录的是反代服务器的请求信息,这种日志不是我们想要的,期望记录的日志是真正客户端请求资源的信息,可通过proxy_set_header指令达到目的,如让后端服务器记录客户端的IP:
a.在nginx的http上下文或者server里定义,proxy_set_header X-RIP $remote_addr ###X-RIP自定义一个真正的客户端IP字段,其值为nginx内建的变量remote_addr
b.更改后端服务器的web日志格式,如改httpd日志格式
将刚才定义的X-RIP替换掉%h即可
这样后端日志将记录真正客户端的信息,要是想记录其他信息也可以自己定制
3、nginx的proxy反代缓存配置及调用:
nginx的反向代理缓存一般在http上下文定义,然后在location模块中调用
- http配置如proxy_cache_path /data/cache/nginx levels=2:2 keys_zone=nginxcache:20M inactive=1d max_size=1g;###proxy_cache_path 定义缓存目录,levels=2:2定义缓存目录结构,keys_zone=nginxcache:20M定义缓存空间及大小,inactive定义失效时间
b.location上下文调用缓存配置:
proxy_cache nginxcache ###调用缓存,value跟上文http定义的keys_zone名称
proxy_cache_key $request_uri###用请求的url定义缓存键
proxy_cache_valid 200 301 302 1d;####定义缓存类型及时间
4、nginx反向代理的其他配置:
a.proxy_conect_timeot 75;##与后端主机发送响应报文的超时时长,最长75秒
b.proxy_send_timeout ##向后端主机发送请求报文的超时时长,默认60秒
5、ngx_http_header_module
- add_header X-via $server-addr ###向响应报文添加自定义首部并赋值
- add_header x-cache $upstream_cache_status ####HIT缓存命中,miss缓存未命中
5、nginx的upstream模块
upstream主要是将多个后端主机定义为服务器组,而后有proxy_pass,fastcgi_pass等进行引用。只能用在http上下文
- upstream webserver {
server 172.18.224.101###可选参数有weight服务器的权重,max_fails=3定义最大失败尝试次数,backup定义该主机为备用主机,down手动使该主机下线
}
定义完upsteam后在location调用即可:
proxy_pass http://webserver; ###调用upstream定义的名字