nginx proxy_pass 省略路径

nginx proxy_pass omitting path

我配置了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/(.*)$ / break;
        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}

上的请求

Nginx 不使用 10.11.12.13 上游服务器上的完整路径,省略了 /1020/ 端点。这种行为的原因可能是什么?

documentation 状态:

When the URI is changed inside a proxied location using the rewrite directive, and this same configuration will be used to process a request (break) ... In this case, the URI specified in the directive is ignored and the full changed request URI is passed to the server.

因此,您可以使用 rewrite...break,例如:

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

或者,您可以让locationproxy_pass语句执行相同的转换,例如:

location /app {
    proxy_pass https://10.11.12.13/1020;
    ...
}

请注意,在后一种情况下,为了正确转换,两个值都应以 / 结尾,或者都不以 /.

结尾