话聊Nginx反向代理小技巧

一个月,村长召集村干部开会,当然还有乡领导莅临指导。会议主要讨论咱村儿那片后山如何治理的问题,鉴于目前常有财狼虎豹出没,又不能伤害这些濒危品种,乡亲们无法实时知晓后山情况,目前只有一部分区域设置了人工岗哨。所以村长在乡领导的指导下决定引入咱村儿最高级别方案,代号:SOS。于是我作为村干部开始了起得比鸡早,睡得比狗晚,吃得比猪差,干得比驴多的阳光积极的5S度假生活。

前面需求方案已经搞清楚了,接下来就是正经事儿。

作为老项目升级HTTPS,把多台“单机”服务佯装成“分布式”服务,并改造Android app,从蛋蛋开始开发iOS app等等,这是个费力不讨好的系列。因为这次改造基本已经到极致,想要再开发新功能,打造稳定的平台化服务是不太可能了。

其中首要的问题就是把IP+端口访问的方式变为域名访问方式。因此引入Nginx反向代理,话说非常简单,在CentOS 7系统下的/etc/nginx/nginx.conf中的http>server中添加:

#多个区域的sos信号,因此是多个location。
location /sos/ {
#设置Host,隐藏后端地址
proxy_set_header Host $host;
#后端服务地址
proxy_pass http://IP:Port/;
}

可是老项目中根本都没有sos这个路径,所以一旦开启反向代理,app端比较友好,屡试不爽;web端(主要是警示牌“JSP”怂样儿,虽然曾经不可一世)就尴尬了,立马翻脸不认人,先是CORS跨域来个下马威,紧接着又是甩一堆404自己找去。

这事儿怪不得别人,都是前任的错(锅是要背到底的)。所以这个时候我需要想办法让web能识别sos,为此,我也是重新把Nginx的相关组件和指令研究了一遍,无果。昨晚出去跑会儿步,回来干到凌晨3点左右(睡得比狗晚)有点眉目了,虽然并没有什么鸟用,但今天借此想到一个改动相对合理的方案。

首先,自定义HTTP Header,将信号sos告诉后端服务,后端服务接收sos并组装到JSP中,如此,所有引用的资源就愉快地携带着/sos/信号得救了,从此村民再也不用找404了。

Nginx配置:

location /sos/ {
#自定义header重点
proxy_set_header SOS sos;
#设置Host,隐藏后端地址
proxy_set_header Host $host;
#后端服务地址
proxy_pass http://IP:Port/;
}

 

JSP接收:

String sos = request.getHeader(“SOS”);

到这里就是修改所有JSP页面的活儿了,一定要修改彻底,否则,又得找404去了。

总结:解决问题的要诀就是先出去溜达一圈,跑跑步什么的,时间要足够长,具体细节再议。

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: