nginx proxy_pass省略路径

时间:2019-08-02 14:33:08

标签: nginx url-rewriting reverse-proxy proxypass

我已经配置了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/(.*)$ /$1 break;
        proxy_pass https://10.11.12.13/1020/;

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

在端口9080上侦听的服务器重定向到路由/ app / {生成的子路径}。 IP 10.11.12.13上的服务器在{generated subpath}上处理请求

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

1 个答案:

答案 0 :(得分:1)

documentation指出:

  

使用rewrite在代理位置内更改URI时   指令,并且将使用相同的配置来处理   request(break)...在这种情况下,指令中指定的URI   将被忽略,并将更改后的完整请求URI传递到服务器。

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

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

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

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

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