前两天做了个项目,让同事拿去投标,为了给用户演示,需要外网访问,于是配置了apache代理。随之问题就来了,外网访问的时候,request.getServerName()总是获取不到代理服务器的地址(外网域名地址),返回的却是是公司内网地址192.168.x.x。
网上搜罗些资料,发现默认情况下,apache作为代理为了提高性能,一些Http头部信息不回转发给后台服务器,其中就包括代理服务器的host信息,而tomcat中对于request.getServerName()的实现,就是取这个host信息,如果http header总没设置,则取本机IP地址。
所以,要解决这个问题,需要在配置代理的时候,显示告诉代理服务器,需要把代理服务器的Host转发给后台服务:
apache 为:在<VirtualHost/>标签中的最后添加 ProxyPreserveHost on
nginx为:在location {...}中添加 proxy_set_header Host $host;
参考:http://www.phpfensi.com/php/20131127/466.html
本文介绍了一个在使用Apache作为代理服务器时遇到的问题:外网访问时请求中的代理服务器Host信息丢失,导致获取到的是内网地址。文章详细解释了问题原因,并提供了针对Apache和Nginx的解决方案。
1万+

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



