我目前正在使用nginx 1.9.11。我的情况是我的应用程序通过负载均衡器从动态端口提供,但应用程序本身的端口已设置。看起来像这样
Port [4000-4999] on load balancer -> instances of nginx all on port 80
我需要将/myapp
重定向到/myapp/
,而不会丢失端口信息。但我不知道应用程序级别的端口,因为应用程序是动态创建和销毁的!
这是我的重写规则的语法:
rewrite ^/myapp /myapp/
我得到的是:
http://example.com:4000/myapp -> http://example.com/myapp # no port 4000!
我无法对端口进行硬编码......因为有千种可能性,而且它们一直在变化!我需要留在同一个港口,但我不知道我们进来的港口。如何让nginx单独离开端口?
我已尝试过的内容......
在http
,server
和location
部分:
port_in_redirect off;
在server
部分:
proxy_set_header Host $host:$server_port;
同样在server
部分:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
答案 0 :(得分:1)
经典。经过两天的努力,我写了一篇很好的Stack Overflow帖子,之后发生了一些事情,我试了一下,然后就可以了。
以下是我解决问题的方法:我将重写规则更改为:
rewrite ^/myapp $http_host/myapp/
它有效!