帮助我了解如何使用 ProxyPass

帮助我了解如何使用 ProxyPass

更新:在对下面的两个答案进行研究后,我添加了一个修改后的问题。

你好呀,

如果您正在阅读本文,那么您可能熟悉 Apache 的 mod_proxy 及其 ProxyPass 功能。与许多其他人一样,我遇到了一个问题:我可以从内部网络外部访问一个应用程序,但该应用程序本身会访问不同机器上的其他内部应用程序,当您使用此设置进行远程访问时,事情就会变得很棘手。

因此,我的设置非常简单,我有:

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

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

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

ProxyPass /新http://192.168.0.101/

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

那么,如何才能让 ProxyPass 按照我的意愿工作呢?我是否需要对 Apache 进行一些操作,以便它始终在另一个应用程序中的 url 之前写入 /new,或者这是我应该在 Django 应用程序中修改的内容?

任何建议和指示都将不胜感激。感谢您的时间

答案1

你应该修改你的 django 应用程序,使其期望在/new/auth/login而不是/auth/login。通常你的代理传递应该如下所示:

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

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

答案2

使用 VirtualHost。例如,设置服务器的名称(例如sub.external.com)到你的服务器 IP(例如123.456.678

出于安全考虑,如果使用 ProxyPass,则需要明确转发 HTTP_HOST设置.py,每票号 #6880

USE_X_FORWARDED_HOST = True

然后将以下内容添加到Apache/etc/httpd/httpd.conf

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

将您的 VirtualHost 添加到/etc/httpd/extra/httpd-vhosts.conf

NameVirtualHosts *:80

<VirtualHost *:80>
  ServerName sub.external.com
  ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

现在,您将能够从http://sub.external.com无需担心“路径”

答案3

感谢您的回复,我正在回答我自己的问题,因为玩过这个之后需要进行一些修改。

首先,App#2 运行http://192.168.0.101..它不会流失http://192.168.0.101/路径因此 ProxyPass 无法正常工作

因此,在与 irc 上的一些 #apache 人交谈后,我发现我需要做这样的事情:

RewriteCond %{HTTP_HOST} ^app2.myremotedns.com*

重写规则 .*http://192.168.0.101/[页]

这样做的目的是向 app2.myremotedns.com 的任何请求发送一条重写规则,以便通过代理发送到内部 IP。

这在某种程度上是可行的,但是存在三个问题:

  • 由于所有页面都需要登录,如果我远程访问 app2 上的任何内容,它会重定向到 /auth/login .. 但是,由于当前的 Rewrite 设置,我在 Firefox 停止尝试该路径之前遇到了重定向循环。我猜这可能与 Django 的重定向方法有关,但我不太确定。

  • 如果我禁用登录,页面可以工作,但不是完全工作。我似乎能够获取 App#2 的索引页,但实际上什么都做不了

  • 静态媒体全部损坏了,但这可能是一个简单的修复...现在不用担心。

所以,我遇到的问题比我想象的要复杂得多……:)

相关内容