【问题标题】:How to forward all paths that start with a specific location in nginx?如何转发以nginx中特定位置开头的所有路径?
【发布时间】:2019-11-18 09:41:25
【问题描述】:

我想将所有以 /api/ (/api/* ??) 开头的路径转发到端口 1000,但实际配置要么只转发包含“/api/”的路径,而在 (/api/登录不转发)

location /api/ {
                    proxy_pass http://localhost:1000/;
            }

或者它根本不起作用

location ~ ^/api/(.*)$ {
                    proxy_pass http://localhost:1000/;
            }

。服务器被定义为休闲:

server {
            listen       80;
            keepalive_timeout    70;
            server_name  server_name;

            location / {
                    root /var/www/html;
                    index index.html;
            }
            location /api/ {
                    proxy_pass http://localhost:1000/;
            }
            }

如果有任何帮助,我将不胜感激,谢谢!

【问题讨论】:

  • 如果/api/login 未被此位置块处理,则必须有另一个优先的位置或重写语句。我们需要从您的访问和错误日​​志中查看更多配置和相关条目。
  • 感谢您的回复!这是否意味着我必须在 nging 中映射所有 api 路径,并且没有方法可以自动重定向所有以 /api/ 开头的路径?
  • 没有。您的问题中的位置将匹配任何以 /api/ 开头的 URI除非在您的配置中的其他位置有另一个位置或重写语句覆盖它。
  • 好了,我现在添加了整个配置,可能是第一个位置“/”影响了错误?
  • 该配置导致错误。您是否查看过错误日志或使用nginx -T 对其进行了测试?

标签: regex api nginx proxy location


【解决方案1】:

注意:

location /api/ {
    proxy_pass http://localhost:1000/;
}

如果有请求/api/foo,那么你的API服务器会看到/foo

另一方面,如果(注意proxy_pass 中没有斜杠),您使用:

location /api/ {
    proxy_pass http://localhost:1000;
}

然后对于相同的请求,您的 API 服务器将“按原样”接收请求:/api/foo

因此请确保您使用正确的方法(斜杠/无斜杠),这取决于您的 API 服务器如何处理 URL(如果它被配置为处理 /api/foo URL,那么您不应该在 proxy_pass 中使用斜杠。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2015-11-14
    • 2017-04-25
    相关资源
    最近更新 更多