在nginx中配置server非80端口时,我们在访问时会在url中加入对应的端口号,如:http://xxx.xxx.xxx:8082/,但如果在nginx服务器前有另一台服务器作为用户首先访问的web服务器,这台服务器设置了端口转发,将80端口获得的请求转发到nginx中的对应端口中,如8082,这时用户使用的url是没有端口号,但nginx会自动增加端口号(80)到url上,很可能导致用户访问失败,可以将location 中增加proxy_set_header Host $host,即可解决此问题(工作中遇到,踩坑记录)
首先我们修改 server_name IP 为 server_name www.exmple.com ,并配置代理,如下
并在本地的 /etc/host 下配置 172.16.8.172 www.exmple.com
在浏览器中访问发现只能跳转的 80 端口,而不能去到指定的端口
image这问题就严重了,各种查找才发现原来是 location写的有问题 ,修改后的location 如下:
server {
listen 80;
server_name www.exmple.com; # 这里填写你的域名
location / {
proxy_pass www.exmple.com:8082; # 这里指定要转发的端口
}
}
这里需要将80端口的请求转发到 指定的8082 上 。这样就实现域名访问而不需要加端口,最后纪念一下成功
地址栏 直接输入 域名即可
最终完美解决解决了 域名访问的问题和默认端口转发到指定端口的问题
完整版本的配置
server {
listen 80;
server_name www.excise.com;
location / {
proxy_pass www.excise.com:8082;
}
}
server {
listen 8082;
server_name www.excise.com;
location / {
root /data/****;
index index.html index.htm;
try_files uri/ /index.html;
proxy_set_header Host remote_addr;
proxy_set_header REMOTE-HOST proxy_add_x_forwarded_for;
#proxy_pass www.excise.com:8082/login;
}
网友评论