代码之家  ›  专栏  ›  技术社区  ›  riqitang

nginx反向代理“全部捕获”位置

  •  1
  • riqitang  · 技术社区  · 8 年前

    编辑:更清楚地说,这是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 回复  |  直到 8 年前
        1
  •  3
  •   NullDev Kevin Fisher    8 年前

    我看不出你的代码有什么问题。

    location / { 已是“未处理”位置的默认位置块。


    这将匹配所有位置:

    location / {
        # ...
    }
    

    这将仅与根匹配:

    location = / {
        # ...
    }
    

    这将匹配/验证和子目录:

    location /auth {
        # ...
    }
    
        2
  •  0
  •   riqitang    8 年前

    这一定与nginx如何进行请求匹配有关 auth authorize 太相似了,这会导致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 都是由 位置/