nginx proxy_pass正在设置端口作为响应
我的Nginx配置类似于:nginx proxy_pass正在设置端口作为响应,nginx,proxy,http-headers,reverse-proxy,Nginx,Proxy,Http Headers,Reverse Proxy,我的Nginx配置类似于: server { listen 80; listen 443; server_name api.mysite.dev; location / { proxy_set_header Host "api.mysite.dev"; proxy_set_header X-Real-IP $remote_addr; proxy_pass $scheme://127.0.0.1:8001;
server {
listen 80;
listen 443;
server_name api.mysite.dev;
location / {
proxy_set_header Host "api.mysite.dev";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass $scheme://127.0.0.1:8001;
}
}
server {
listen 80;
listen 443;
server_name mysite.dev www.mysite.dev;
# Forward all /api/ requests ti api.mysite.dev
# sadly need to keep this around for backwards compatibility
location /api/ {
proxy_set_header Host "api.mysite.dev";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass $scheme://127.0.0.1:8001/;
}
# The proxy_pass here ends up putting the port (8002) in the response URL.
location / {
proxy_set_header Host "www.mysite.dev";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass $scheme://127.0.0.1:8002;
}
}
因此,正如评论中所说,当我请求www.mysite.dev时,我的浏览器被转发到www.mysite.dev:8002。
知道我做错了什么吗
提前谢谢 您必须设置以下选项:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
这是一个有效的示例:
server {
listen 80;
listen 443;
server_name api.mysite.dev;
location /api/ {
proxy_pass http://127.0.0.1:8001/;
proxy_redirect off;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header Host "api.mysite.dev";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
遗憾的是,这并不能解决问题。更多信息:浏览器将被重定向到主机标题中的任何内容。因此,如果我将其设置为“www”,并请求www.mysite.dev/some/resource,浏览器将被发送到www:8002/some/resource。我刚刚注意到您缺少这个头,我通常用于反向代理proxy\u set\u头X-Forwarded-for$proxy\u add\u X\u Forwarded\u for;这基本上是正确的,所以我编辑了你的答案。添加“proxy\u set\u header X-Forwarded-Host$Host;”是最终为我解决的问题。