帮我了解如何使用ProxyPass


11

更新:在解决了以下两个答案之后,我添加了一个修订的问题。

嗨,您好,

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

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

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

Machine#2是运行Django的新应用程序,它使用完全不同的后端(甚至是auth),它托管在单独的计算机上。在我们的Intranet中,我们通过一个简单的命名主机名访问它,该主机名基本上链接到内部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应用程序中对其进行修改?

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

Answers:


11

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

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

将其与预期位于/ new /的Django应用程序结合使用,可以解决您的问题。


2

使用虚拟主机。例如,将服务器的A名称(例如sub.external.com)设置为服务器IP(例如123.456.678)。

为了安全起见,您使用的ProxyPass需要明确地向前HTTP_HOST如果settings.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访问您的网站,而不必担心“路径”


1

感谢您的答复,我在回答我自己的问题,因为在处理此问题后需要进行一些修改。

首先,App#2从http://192.168.0.101运行..它没有从http://192.168.0.101/path运行,因此ProxyPass无法正常工作

因此,在与irc的一些#apache家伙交谈之后,我发现我需要执行以下操作:

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

RewriteRule。* http://192.168.0.101/ [P]

这样做是为了将对app2.myremotedns.com的所有请求发送重写规则,以将其通过代理发送到内部ip。

这有点奏效,但存在三个问题:

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

  • 如果我禁用登录,则页面可以正常工作,但不能完全正常。我似乎能够获取App#2的索引页,但实际上什么也没有

  • 静态媒体都坏了,但这可能是一个简单的解决方法,现在不用担心。

所以,我有一个比我想象的还要复杂的问题... :)


使用任何不同于默认配置的django配置都会带来很多麻烦。最近有点儿解决了我的博客上使用Django和的ProxyPass另一个问题:fromzerotocodehero.blogspot.com/2011/01/...

1
您对此有任何解决方案吗?我有完全相同的问题,尤其是在失去媒体风格等方面。
membersound 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.