帮助我了解如何使用ProxyPass

13 proxy mod-proxy django proxypass apache-2.2

更新:在玩弄下面的两个答案后,我添加了一个修改后的问题。

你好呀,

如果您正在阅读本文,您可能熟悉 Apache 的 mod_proxy 及其 ProxyPass 功能。像许多其他人一样,我有一个可以从内部网络外部访问的应用程序的问题,但该应用程序本身可以访问不同机器上的其他内部应用程序,当您通过此设置进行远程访问时,事情变得不稳定。

所以,我的设置非常简单,我有:

机器 #1 启用了远程访问,我通过主机名访问它,它会吐出运行在它上面的 PHP 应用程序。

Machine #2 是一个运行 Django 的新应用程序,它使用完全不同的后端(甚至是 auth),它托管在单独的机器上。在我们的 Intranet 中,我们通过一个简单的命名主机名访问它,该主机名基本上链接到内部 192.168.0.101 ip。

我尝试使用 ProxyPass 来设置它,例如,传递到 /new 会将其发送到新应用程序:

ProxyPass /new http://192.168.0.101/

这种工作方式,它将请求发送到另一个应用程序,但它中断了,因为我的 Django 应用程序想要重定向到 /auth/login/,它立即无法识别。如果我自己将 url 修改为 foo.net/new/auth/login,我会得到我的登录页面,但正如您所猜测的那样,在整个浏览过程中这样做并不方便。

那么我怎样才能让 ProxyPass 像我想要的那样工作呢?我是否需要对 Apache 做一些事情,以便它总是在另一个应用程序中的 url 之前写入 /new ,或者这是我应该在我的 Django 应用程序中修改的内容吗?

任何提示和指针也将不胜感激。谢谢你的时间

f4n*_*4nt 11

您应该修改您的 django 应用程序,使其位于 /new/auth/login 而不是 /auth/login。通常,您的代理通行证应如下所示:

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path
Run Code Online (Sandbox Code Playgroud)

结合您期望在 /new/ 的 Django 应用程序应该可以解决您的问题。