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/的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 nginx 位置?

nginx,别名和位置

var a=function和function a有啥区别

无法在 nginx 中找出位置块

nginx设置位置错误下载

Nginx 位置、别名、重写、root