龙空技术网

Nginx处理redirect 端口丢失的问题

留余庆 88

前言:

此时咱们对“nginx代理重定向后端口不对”大约比较关注,朋友们都想要知道一些“nginx代理重定向后端口不对”的相关文章。那么小编同时在网络上搜集了一些关于“nginx代理重定向后端口不对””的相关知识,希望小伙伴们能喜欢,大家一起来了解一下吧!

前因后果就不说了,就是用到了重定向,然而在项目是使用Nginx的反向代理,然后问题就来了,在访问项目地址的时候,页面报出503 service Unavailable,检查了一下路径,发现路径中端口号没有了,例如122.51.157.193:9099直接就变成了122.51.157.193,百思不得其解!

  因为种种原因,Nginx并不能监听在80端口,或者外部通过NAT方式将请求丢给Nginx,外部地址并不是标准http(s)端口,此时Nginx并不能美好的处理这些重定向。发生重定向的时候会丢失端口。

#反向代理

listen 81 default_server;

set $TOMCAT_HOME /var/lib/tomcat7;

location / {

root $TOMCAT_HOME/webapps/ROOT;

proxy_pass ;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

# 访问/data的时候会自动加上/成为/data/

listen 81 default_server;

location /data {

root /var/data;

}

处理

这个很容易搞定,网上流传开来的proxy_set_header对此不起作用。后来我发现gitlab-ce这个用非标准端口访问是没有问题的,我看了一下gitlab-ce的nginx配置,发现是这么配置的:

proxy_set_header Host $http_host;

我又发现nginx软件包释放出的配置文件(from ppa: NGINX Stable),发现里面其实是带有一个参考文件/etc/nginx/proxy_params

proxy_set_header Host $http_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;

这里面写的也是 proxy_set_header Host $http_host;,于是乎直接include,搞定

location / {

root $TOMCAT_HOME/webapps/ROOT;

proxy_pass ;

include proxy_params;

}

没这个文件就把这些内容手工敲到location配置段下。

再细看官方文档,其实也提及了:

An unchanged “Host” request header field can be passed like this:

proxy_set_header Host $http_host;

标签: #nginx代理重定向后端口不对