我有2个apache 2.2.21一个外部和一个内部,我需要映射内部apache在外部apache后面的path,但我有一些绝对url的问题。
我试过这些configuration:
RewriteEngine on RewriteRule ^/externalpath/(.*)$ http://internal-apache.test.com/$1 [L,P,QSA] ProxyPassReverse /externalpath/ http://internal-apache.test.com/
要么
<Location /externalpath/> ProxyPass http://internal-apache.test.com/ ProxyPassReverse http://internal-apache.test.com/ </Location>
我的内部apache使用search资源的绝对path作为图像,CSS和HTML,我现在不能改变它。
有些build议? 谢谢
一些替代scheme:
一 )重写内部的应用程序使用相对path,而不是绝对的。
二 )重新部署内部的应用程序在一个子目录,而不是在你的内部apache的根。
三 )一个和两个往往不太可能发生…如果幸运的话,内部应用程序只使用两个或三个子目录,这些子目录在您的主站点上是未使用的,只需编写一堆ProxyPass行:
# Expose Internal App to the internet. ProxyPass /externalpath/ http://internal-apache.test.com/ ProxyPassReverse /externalpath/ http://internal-apache.test.com/ # Internal app uses a bunch of absolute paths. ProxyPass /css/ http://internal-apache.test.com/css/ ProxyPassReverse /css/ http://internal-apache.test.com/css/ ProxyPass /icons/ http://internal-apache.test.com/icons/ ProxyPassReverse /icons/ http://internal-apache.test.com/icons/
四 )为内部应用程序创build一个单独的子域,并简单地反向代理一切:
<VirtualHost *:80> ServerName app.test.com/ # Expose Internal App to the internet. ProxyPass / http://internal-apache.test.com/ ProxyPassReverse / http://internal-apache.test.com/ </VirtualHost>
五 )有时开发人员完全无能为力,他们的应用程序不仅产生绝对的URL,甚至包括在他们的URL的主机名部分,产生的HTML代码如下所示: <img src=http://internal-apache.test.com/icons/logo.png> 。
A )您可以使用水平分割DNS和场景4的组合解决scheme。内部和外部用户都使用internal-apache.test.com地址,但是您的内部DNS直接指向internal-apache.test的IP地址。 com的服务器。 对于外部用户,internal-apache.test.com的公共logging指向公共Web服务器的IP地址,然后可以使用解决scheme4。
B )你实际上可以让apache不仅代理请求到你的内部apache,而且还会在响应主体被传送给用户之前重写。 (通常,代理只重写HTTP头/响应)。 mod_substitute在Apache 2.2。 我没有testing,如果它与mod_proxy很好,但也许以下工作:
<Location /externalpath/> ProxyPass http://internal-apache.test.com/ ProxyPassReverse http://internal-apache.test.com/ AddOutputFilterByType SUBSTITUTE text/html Substitute "s|internal-apache.test.com/|public-apache.test.com/externalpath/|i" </Location>