Nginx不重定向代理响应正确

68de4m5k  于 12个月前  发布在  Nginx
关注(0)|答案(1)|浏览(197)

我在服务器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_redirectrewritereturn。但这并不适合我.

esyap4oy

esyap4oy1#

您可能需要重新配置服务器B,而不是重新配置Nginx。当服务器B发出重定向时,它需要包含目录。您可以将头传递给后端,让它知道它位于反向代理后面,然后在检测到这些头时更改后端以进行不同的重定向:

proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

字符串
据我所知,Nginx没有相当于Apache的proxypass_reverse指令,该指令从后端服务器munges重定向头。因此另一种解决方案是从Nginx切换到Apache的前端,它具有更改重定向的功能。

相关问题