nginx监听非80端口,转发地址端口丢失!解决方案
nginx监听非80端口,转发地址端口丢失!解决方案!!!!!
问题场景:
登录成功后,跳转主页,端口丢失,无法访问。nginx监听端口:81,
tomcat访问端口:9004。例如:登录地址:http://xxx:81/login,
登录成功后跳转地址:http://xxx:81/index,
但实际跳转地址变为:http://xxx/index,nginx代理端口(81)无故消失,导致无法访问。
nginx配置如下:
location /xxx/{
proxy_pass http://127.0.0.1:9004/xxx/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $ host:$server_port;
proxy_redirect http:// https://;
}
网上提供的方案:
proxy_set_header Host $ host:$server_port;
proxy_set_header Host $host:81; // 改为(写死监听端口,经测试无效)
最终解决方案:
增加配置:proxy_set_header X-Forwarded-Port $server_port;
最终配置如下:
location /xxx/{
proxy_pass http://127.0.0.1:9004/xxx/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $ host:$server_port;
proxy_set_header X-Forwarded-Port $server_port;(这个配置是重点)
proxy_redirect http:// https://;
}
重启nginx,成功进入.
总结:因为http进行转发没有端口.完整代码
server {
listen 443 ssl;
server_name xxxx.com;
ssl_certificate /xxxx.pem;
ssl_certificate_key /xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /video/ {
proxy_redirect http:// https://;
#port_in_redirect on;
add_header 'Access-Control-Allow-Origin' 'https://xxx.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
proxy_pass https://192.168.1.248:5556/;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
location / {
proxy_redirect http://xxxx.com https://xxx:8182;
port_in_redirect on;
add_header 'Access-Control-Allow-Origin' 'https://xxxxx.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
proxy_pass http://192.168.2.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}