nginx反向代理" catch-all"地点

时间:2018-01-26 14:22:15

标签: nginx-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 /,但我找不到如何执行此操作。

2 个答案:

答案 0 :(得分:0)

我的代码没有任何问题。

location / {已经是"未处理"的默认位置块位置。

这将匹配所有位置:

location / {
    # ...
}

这只会匹配根目录:

location = / {
    # ...
}

这将匹配/ auth和子目录:

location /auth {
    # ...
}

答案 1 :(得分:0)

它必须与nginx请求匹配的方式有关 - 不知何故authauthorize太相似而且会导致nginx问题(不是很好的解释,也许更有经验的nginx内部人员会发出声音在)。 "解决方案"是将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 /处理