nginx 反向代理 "catch-all" 位置

nginx reverse proxy "catch-all" location

编辑:更清楚地说,这是 nginx 版本 1.13.8。

下面以nginx.conf文件为例:

http {
    upstream portal_backend {
        server pc-loc43-01:15080;
    }
    upstream auth_backend {
        server pc-loc43-01:16080;
    }
    server {
        listen       9080 default_server;
        server_name  my-reverse-proxy;

        location / {
            auth_basic off;
            proxy_http_version  1.1;
            proxy_set_header Host $http_host;

            proxy_pass http://portal_backend/;
        }
        location /auth {
            auth_basic off;
            proxy_http_version  1.1;
            proxy_set_header    Host $http_host;

            proxy_pass http://auth_backend/auth;
        }
    }
}

如果无法将请求与任何位置匹配,我想将 nginx 配置为默认为 location /,但我找不到如何执行此操作。

我没有发现您的代码有任何问题。

location / { 已经是 "unhandled" 个位置的默认位置块。


这将匹配所有位置:

location / {
    # ...
}

这将只匹配根:

location = / {
    # ...
}

这将匹配 /auth 和子目录:

location /auth {
    # ...
}

这一定与 nginx 如何进行请求匹配有关——不知何故 authauthorize 太相似了,它会导致 nginx 问题(不是一个很好的解释,也许有人对 nginx 内部更有经验可以插话)。 "solution" 是将 location / 复制到 location /authorize,所以现在配置文件如下所示:

...
    location / {
        auth_basic off;
        proxy_http_version  1.1;
        proxy_set_header Host $http_host;           
        proxy_pass http://portal_backend/;
    }
    location /authorize {
        auth_basic off;
        proxy_http_version  1.1;
        proxy_set_header Host $http_host;           
        proxy_pass http://portal_backend/;
    }
...

所有其他路线都按我的预期工作,例如/users/customers/whatever都由location /

处理