![Nginx 反向代理到已重定向的外部 URL](https://linux22.com/image/607782/Nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%88%B0%E5%B7%B2%E9%87%8D%E5%AE%9A%E5%90%91%E7%9A%84%E5%A4%96%E9%83%A8%20URL.png)
下午好,先生们,
我当前的设置是一个单一站点,我们称之为http://production.com,它由 Nginx 在端口 80 上作为静态缓存提供服务,而 Apache 在后台在端口 8080 localhost 上提供服务,其实没什么特别的,而且运行得很好。
我现在要做的是让 URLhttp://production.com/foobar包含来自外部 URL 的数据,我们将其称为http://internal.com/。
我遇到的问题是,如果我浏览到http://internal.com/我被自动重定向到http://www.internal.com/forum/forum.php因为这是一个 vBulletin 论坛,它有自己的内部重定向,而不是基于站点 URL 变量。当然,如果我尝试通过 Nginx 代理它,也会发生同样的事情,我只是被“转发”到 ../forum/forum.php URL。
那么,我该如何解决这个问题呢?有没有办法让重定向以某种方式不可见,并且不让 Nginx 以某种方式在地址栏中实际跟随它?基本上是一个没有使用实际 iframe 的 iframe。:-)
这是我现在正在尝试的 Nginx 代码片段:
location /foobar {
proxy_pass http://internal.com/;
proxy_redirect off;
proxy_set_header Host $host;
}
有什么想法吗?提前致谢。
答案1
我发现在这种情况下你基本上有两种不同的选择。
正如 Andrei Mikhaltsov 指出的那样,您可以使用
ngx.lua
模块并在您将收到的任何 HTTP 响应上更改代理,这当然可能是一个噩梦。您可以对要“转发”到的任何应用程序进行一些更改,在我们的例子中是一个论坛。
在我们的案例中,我们选择了 2 号并基本上将它们放在同一个域下并对论坛做了一些更改。