我在服务器 A 上有一个正在运行的 nginx 实例,它将请求传递到服务器 B 上的 Apache Web 服务器。
我已经测试了几个(!)设置...但以下问题仍然存在:
像这样的请求https://example.com/myapp
被转换并http://example.com/
传递给服务器 B。服务器 B 向 nginx/服务器 A 发送响应http://example.com/login
。但是 nginx 不会将该响应转换为https://example.com/myapp/login
:如果我使用的话,我收到wget https://example.com/myapp
的是https://example.com/login
(缺少该/myapp
部分)。
这是我当前的配置:
server {
listen 443 ssl;
server_name example.com;
location /myapp/ {
proxy_pass http://192.168.0.100/;
}
}
我已经阅读了许多线程并使用了许多参数,例如proxy_redirect
、rewrite
和return
。但这对我不起作用......
您可能需要重新配置服务器 B 而不是重新配置 Nginx。当服务器 B 发出重定向时,它需要包含该目录。您可以将标头传递给后端,让它知道它位于反向代理后面,然后更改后端以在检测到这些标头时以不同的方式重定向:
据我所知,Nginx 没有相当于 Apache 的
proxypass_reverse
指令,该指令可以从后端服务器中删除重定向标头。因此,另一个解决方案是前端从 Nginx 切换到 Apache,它具有更改重定向的功能。