【问题标题】:nginx location /sub/$VAR/ to proxy_pass /sub/$VAR/nginx 位置 /sub/$VAR/ 到 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;
}

非常感谢!

【问题讨论】:

    标签: variables nginx proxy location


    【解决方案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 这样的子目录只能在没有结束斜杠的情况下访问 再次感谢您的回答!它已经为我省去了很多额外的麻烦
    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 2020-06-09
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多