最近使用vps做了许多网站,便用nginx做proxy。期间遇到了一些问题。
刚开始的配置如下:
server { listen 80; server_name www.qiqufang.com; location / { proxy_pass http://112.213.109.16:8080/; } }
配置这个很简单,但是访问网站的时候就遇到了许多的麻烦.
两步解决问题
1、网站页面中直接读取了服务器ip和端口号。
2、在网站服务端不能正确获取到port.或者做重定向的时候地址总是丢掉端口(port)。
最简单的解决方案,修改Nginx的配置文件:
server { listen 80; server_name www.qiqufang.com; server_name_in_redirect off; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://112.213.109.16:8080/; } }
如上才是正确的配置nginx。其中的proxy_set_header Host $host:$server_port; 这一行非常关键。Nginx和Java配合的项目中,Java方法request.getServerName()获取不到域名也是因为以上配置问题导致。
关于服务器端如何用Nginx代理隐藏真实IP端口号,实现在url访问时,完全隐藏IP端口号,只需要修改nginx配置文件即可。后端应用不管是tomcat、jetty还是apache都不用关心,这就是nginx代理的魅力所在。