前几天配置了nginx的反向代理。
可是有个问题。 在项目中,写request.getServerName()的时候,总是返回的127.0.0.1 这个地址。
折腾的好久,今天搜了搜,发现是配置的原因, 记载一下。
我以前的配置:
- location / {
- proxy_pass http://127.0.0.1:18080/;
- }
在页面中使用 getservername得到的结果:
可见 ,结果是 应用的域名和端口。
我的目的是:得到 代理服务器的地址和端口。而不是实际应用的地址和端口。
对配置文件做如下修改:
- location / {
- proxy_pass http://127.0.0.1:18080/;
- proxy_set_header Host $host;
- }
重启服务: nginx -s reload
再次访问:
我是在虚拟机环境中,配置的host-only 上网,因此访问宿主机器 应该通过 192.168.137.1 这个ip访问宿主的虚拟出来的网卡。
通过上图可见,反向代理后,返回的信息,不再是配置的地址,而是客户端实际访问的代理服务器的地址了。
前辈的文章中说:
- nginx反向代理配置时,一般会添加下面的配置:
- proxy_set_header Host $host;
- 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;