nginx 如何纠正虚拟目录下后端服务器重定向响应的路径

nginx 如何纠正虚拟目录下后端服务器重定向响应的路径

以下是我部署的服务器:

客户端 ------ nginx 代理(example.com) ------ 后端服务器(192.168.1.20)

Nginx 代理的外部 URL 是在虚拟目录下配置的http://example.com/demo/ 后端服务器配置为http://192.168.1.20:8080/

以下是 nginx 配置文件的一部分:

    location /demo {
            proxy_pass      http://192.168.1.20:8080/;
            proxy_redirect  default;
            proxy_set_header        Host            $http_host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    } 

当后端服务器发送带有 LOCATION 头字段的重定向响应(HTTP CODE 302)时http://192.168.1.20/subdir/“,nginx 将此 LOCATION 标头字段映射到“http://example.com/子目录/”,而不是所需的“http://example.com/演示/子目录/”

答案1

后端应用程序必须了解虚拟托管,例如 Zope 虚拟主机怪物和其他解决方案,基本上它必须有一种方法来知道它位于虚拟/代理服务器后面并相应地重写内部 URL、重写等。

至少,内部应用程序必须相对于外部路径编写其重写和 URL。在示例中,内部应用程序可能将重定向发送到/subdir而不是/demo/subdir

答案2

您的代理密码不需要尾部斜杠:

proxy_pass      http://192.168.1.20:8080;

结尾的斜杠会从 URL 中删除“demo”。

相关内容