Apache重写或代理

时间:2012-08-13 14:58:16

标签: apache mod-rewrite plone zope mod-proxy

我的机器上运行了Apache服务器(端口80) 我在我的机器上运行了一个Zope服务器(端口8080)

我希望所有用户,无论域名(现在让我们使用www.example.com)都可以无缝地推送到zope实例

IE 如果我输入我的浏览器 http://www.example.com/mysite

它会显示效果 http://www.example.com:8080/mysite

BUT

我希望网址仍然可以说 http://www.example.com/mysite

(子)域应该是无关的,因为有2或3个域指向同一个服务器

我应该看看mod_rewrite还是mod_proxy?

我有一半的mod_rewrite工作,但是它会改变浏览器中的内容吗?

目前正在尝试

RewriteEngine on    
RewriteRule ^($|/.*) http://localhost:8080/$1 [P]

但获得服务器500

使用“http:// localhost / mysite”进行连接

2 个答案:

答案 0 :(得分:3)

您可以mod_rewrite使用P(代理)规则或mod_proxy来执行您想要的操作。使用mod_rewrite您的配置将如下所示:

RewriteRule ^/mysite/(.*) http://www.example.com:8080/mysite/$1 [P]

使用mod_proxy,您的配置如下所示:

<Location /mysite/>
  ProxyPass http://www.example.com:8080/
  ProxyPassReverse http://www.example.com:8080/
</Location>

两者完成大致相同的事情。使用带有Location的{​​{1}}块可以轻松地将其他配置指令应用于前端服务器上的此路径。

答案 1 :(得分:3)

Zope使用路径中的VirtualHostMonster标记,通过一些特殊的重写支持您的场景开箱即用。这确保了Zope(以及扩展名,Plone)生成的任何URL对于代理请求也是正确的。

你应该使用 mod_rewritemod_proxy,他们将协同工作。

为了更轻松地创建正确的重写网址,有人建立了一个优秀的RewriteRule Witch。插入您的具体示例输出:

RewriteRule ^/mysite($|/.*) \
http://127.0.0.1:8080/VirtualHostBase/\
http/%{SERVER_NAME}:80/mysite/VirtualHostRoot/_vh_mysite$1 [L,P]

因此,对于以http://www.example.com/mysite为根的任何URL,重写这些URL将从运行在localhost端口8080上的服务器提供,确保Zope生成具有相同根的URL。

有关详细信息,请参阅Zope wiki上的detailed documentation on the VirtualHostMonster feature