三分之一的 Nginx 路由忽略上游服务器

One out of three Nginx routes ignores upstream server

我已经为 nginx 反向代理配置了三个位置:

    location / {
            root /var/www/html;
            index index.html;
    }


    location /login {
            proxy_pass http://127.0.0.1:9080;

            proxy_set_header        Host                    $host;
            proxy_set_header        X-Real-IP               $remote_addr;
    }


    location /app {
            rewrite ^/app/(.*)$ / last;
            proxy_pass https://10.11.12.13/1020/;

            proxy_set_header        Host                    $host;
            proxy_set_header        X-Real-IP               $remote_addr;
    }

侦听端口 9080 的服务器重定向到路由 /app/{generated subpath}。 IP 10.11.12.13 上的服务器处理 {generated subpath} 上的请求。因此,我使用相应的重写规则删除前缀路径 /app,然后将请求代理到该服务器的 /1020 端点。

出于某种原因,nginx 反向代理不采用 10.11.12.13 上游服务器,而是尝试在本地查找路径:

8888#8888: *470 open() "/var/www/html/html/createCustomer" failed (2: No such file or directory), client: x.x.x.x, server: 10.10.10.10, request: "GET /app/html/createCustomer?tokenId=0xC00FF3 HTTP/1.1", host: "10.10.10.10"

而不是 last 我相信您正在寻找 break。来自rewritedocumentation

last

stops processing the current set of ngx_http_rewrite_module directives and starts a search for a new location matching the changed URI;

starts a search for a new location matching the changed URi 是您删除 /app/ 部分然后与 / 位置匹配时发生的情况。

break

stops processing the current set