帮我理解如何使用ProxyPass

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

你好,

如果你正在阅读,你可能对Apache的mod_proxy及其ProxyPass函数很熟悉。 像其他许多人一样,我有一个可以从内部networking外部访问的应用程序的问题,但是应用程序本身可以访问不同计算机上的其他内部应用程序,并且当您使用此设置进行远程访问时,情况会变得糟糕透顶。

所以,我的设置很简单,我有:

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

机器#2是一个运行Django的新应用程序,它使用了一个完全不同的后端(甚至authentication),它被托pipe在一个单独的机器上。 在我们的内部网中,我们通过一个简单的命名主机名来访问它,它主要链接到内部的192.168.0.101 ip。

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

ProxyPass /新http://192.168.0.101/

这种工作,它获取到其他应用程序的请求,但它打破了,因为我的Django应用程序想redirect到/ auth / login /,它立即无法识别。 如果我自己修改url为foo.net/new/auth/login我得到我的login页面,但是正如你所猜测的,在整个浏览过程中这样做是不方便的。

那么我怎样才能让ProxyPass按照我的意愿工作呢? 我是否需要对Apache做些什么,所以它总是写入/新的URL在其他应用程序之前,或者这是我应该在我的Django应用程序中修改?

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

您应该修改您的django应用程序,以期在/ new / auth / login而不是/ auth / login。 一般来说你的代理通行证应该是这样的:

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

结合您的Django应用程序期待在/新/应该解决您的问题。

我相信你可以使用ProxyPassReserve指令来解决这个问题。 你可以在这里阅读。

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

由于安全性,如果在settings.py中使用ProxyPass,则需要显式转发HTTP_HOST,即每个票据#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访问您的网站,而无需担心“path&#x201D;

感谢您的回应,我正在回答我自己的问题,因为在玩这个之后需要修改一下。

首先,应用程序#2跑掉http://192.168.0.101 ..它不会跑掉http://192.168.0.101/path,以便ProxyPass将不会工&#x4F5C;

所以在和一些来自irc的#apache人交谈之后,我发现我需要做这样的事情:

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

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

这样做是发送一个重写规则的任何请求到app2.myremotedns.com被发送到通过代理的内部IP。

这个工作有点但是有三个问题:

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

  • 如果我禁用login,那么页面的工作types,但不完全。 我似乎能够获取应用程序#2的索引页,但没有其他的东西真的

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

所以,我有一个更复杂的问题,然后我想象… 🙂

如果您真的想学习,请阅读反向代理的分步示例。

http://www.apachetutor.org/admin/reverseproxies