nginx 位置 /sub/$VAR/ 到 proxy_pass /sub/$VAR/
Posted
技术标签:
【中文标题】nginx 位置 /sub/$VAR/ 到 proxy_pass /sub/$VAR/【英文标题】:nginx location /sub/$VAR/ to proxy_pass /sub/$VAR/ 【发布时间】:2017-01-17 11:15:10 【问题描述】:我已经尝试了几种方法来实现这一点。甚至为每个端口/客户端编写一个新的服务器块。
我正忙着启动一个用户可以租用 n 小时的应用程序,因为每个实例都是在它自己的端口上启动的,我想给用户一个 url,将他们转发到他们自己的基于应用程序的实例以端口号为例。
我现在有的,只是为了测试
location /go/
proxy_pass http://127.0.0.1:5000/;
proxy_redirect off;
location /go/5001/
proxy_pass http://127.0.0.1:5001/;
proxy_redirect off;
location ^~ /status/
proxy_pass http://127.0.0.1:5000/status;
proxy_redirect off;
我想要实现的是,正在传递的 var(例如 5006)被传递到 proxy_pass 端口。此外,对于每个实例,我都希望 /status/ 查看状态(我应该使用 end / 吗?.. 我在没有它们的情况下尝试过,但有时它会加载包含结尾 / 的路径,有时它甚至会替换 url到 127.0.0.1:port,有时它在没有 css/images/js 的情况下加载。
location /go/$VAR/
proxy_pass http://127.0.0.1:$VAR/;
proxy_redirect off;
location /go/$VAR/status/
proxy_pass http://127.0.0.1:$VAR/status;
proxy_redirect off;
非常感谢!
【问题讨论】:
【参考方案1】:如果您需要从 URI 中捕获端口并在 proxy_pass
语句中使用它,您可以使用带有命名捕获的正则表达式位置。
例如(我还没有测试过):
location ~ ^/go/(?<myport>\d+)(?<myuri>/.*)$
rewrite ^ $myuri break;
proxy_pass http://127.0.0.1:$myport;
...
【讨论】:
谢谢!我明天早上先试试这个。有些东西告诉我这是正确的模式。会让你知道它是否有效。再次感谢! 太棒了!几乎完美地工作。我为此寻找了很长时间。谢谢!唯一的问题是,我可以通过 /go/5001/ 但不能通过 /go/5001 访问应用程序,而像 /go/5001/status 这样的子目录只能在没有结束斜杠的情况下访问 再次感谢您的回答!它已经为我省去了很多额外的麻烦以上是关于nginx 位置 /sub/$VAR/ 到 proxy_pass /sub/$VAR/的主要内容,如果未能解决你的问题,请参考以下文章