2016-02-16 18 views
0

我目前使用nginx 1.9.11。我有一种情况,我的应用程序是通过负载平衡器从动态端口提供的,但应用程序本身的端口已设置。它看起来像这样nginx:我如何进行相对重写(重定向)? (即不要混淆端口号!)

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离开这个端口?


我已经尝试过...

httpserver,并location部分:

port_in_redirect off; 

server部分:

proxy_set_header Host $host:$server_port; 

也在t他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

经典。经过两天的努力,我写了一个很好的Stack Overflow帖子,之后立刻发生了一些事情,我尝试了它,并且它可以工作。

以下是我解决了这个问题:我改变了重写规则是这样的:

rewrite ^/myapp $http_host/myapp/ 

和它的工作!