Nginx--反向代理

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

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值