Nginx 的反向代理功能通过 ngx_http_proxy_module 模块实现,允许将客户端请求转发到后端服务器(如 Tomcat、Node.js、Python 应用等),并将响应返回给客户端。
需要安装模块。
[root@nginx2 nginx-1.27.4]# ./configure --prefix=/usr/local/nginx --with-http_sub_module
[root@nginx2 nginx-1.27.4]# make
[root@nginx2 nginx]# /usr/local/nginx/sbin/nginx
-------------------------------------------------------------------------------------------with-http_sub_module
ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘ttls’全部替换成‘运维生存时间’,这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module
--with-http_realip_module
有这么一情况,某网站静态文件很多,而且用户访问的来源有网通,有电信,有铁通...设置还有国外。
为了令处于不同网络运营商的用户收取静态文件的速度都有良好的体现,该网站分别在这些不同运营商的积分中部署了Squid,然后统一 Proxy 到主站的 Nginx 上,形成分布式缓存架构。
如果单是这样的话,主站上 Nginx 的日志,或者应用所获得的IP来源,始终都只会是各个机房中 Squid 的IP。而不是用户的真实IP。Apache 的话,能通过以上所提到的mod_rpaf解决。当然,强大的 Nginx 也有自己的看家法宝。
Nginx 有个在编译时默认不加载的模块 http_realip_module ,就是用来实现这一功能。
--with-pcre
rewrite支持正则表达式
ngx_cache_purge-master
nginx反向代理支持缓存
nginx的反代理及缓存配置
指令: proxy_cache_path
语法: proxy_cache_path path [levels=number] keys_zone=zone_name [inactive=time] [max_size=size];
使用字段: http
指令: proxy_cache
语法: proxy_cache zone_name;
使用字段:http,server,location
指令: proxy_cache_valid
作用: 可以为不的同响应设置不同的时间
语法: proxy_cache_valid reply_code [reply_code ...] time;
使用字段:http,server,location
预备知识:http协议返回代码,例如:2xx,3xx,4xx,5xx
location / {
proxy_cache cache1; #Proxy_cache是吧URL当作Key,用md5编码哈希后保存在磁盘上,支持任意的URL,也支持非200状态码,如404/302等
proxy_cache_valid 200 302 10m; #对于http的什么状态码进行缓存以及缓存的时间
proxy_cache_valid 404 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args; ##以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
proxy_redirect off; #如果需要修改从被代理服务器传来的应答头中的”Location”和”Refresh”字段,可以用这个指令设置。
proxy_set_header Host $host; #Host的含义是表明请求的主机名,因为nginx作为反向代理使用,而如果后端真实的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败【默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器】。
proxy_set_header X-Real-IP $remote_addr; #配合这个把真实的ip 发送给 转发的web服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
proxy_pass http://serverpool;
expires 1d;
}
proxy_buffering off; 关闭缓存
客户端测试(如果web是apache,修改apache的日志格式)
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-real-ip}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
重启httpd服务,httpd日志才可以记录真实客户端ip
1362

被折叠的 条评论
为什么被折叠?



