以下是我部署的服务器:
客户端 ------ 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”。