Nginxredirect到URL中指定的端口

是否有可能使用Nginx从这样的URL代理:

http://example.com/service/1234/foo.php?... 

到像这样的内部服务:

 http://example.com:1234/foo.php?... 

也就是说,从URL中提取一个数字,并将其作为端口号使用到同一台服务器上?

rewrite似乎仅限于操作端口后的URL部分,我不认为proxy_pass可以从中访问正则expression式的子string。

我试图解决的具体问题是,我的服务都可以在端口80上访问,因为各种公司和公共networking阻塞了实际运行服务的异国情调的端口。 所以它必须是一个反向代理,而不是一个redirect。

此方法适用于单个端口:

 location /service/5010 { rewrite ^/service/5010/(.*)$ /$1 break; proxy_pass http://127.0.0.1:5010; } 

但问题是如何使5010只是从URL中提取的参数。

就像是

  location / { set $proxy_port 8080; if ($uri ~ "^/service/([0-9]+)/.*$") { set $proxy_port $1; rewrite ^/service/[0-9]+/(.*)$ /$1 break; } proxy_pass http://127.0.0.1:$proxy_port; } 

至less它在Nginx 1.6.2上适合我