Apache 重写或代理
Posted
技术标签:
【中文标题】Apache 重写或代理【英文标题】:Apache Rewrite or proxy 【发布时间】:2012-08-09 20:05:10 【问题描述】:我的机器上运行着 Apache 服务器(端口 80) 我的机器上运行了一个 Zope 服务器(端口 8080)
我希望所有用户,无论域(现在让我们使用 www.example.com)无缝地推送到 zope 实例
IE 如果我在浏览器中输入 http://www.example.com/mysite
它会显示效果 http://www.example.com:8080/mysite
但是
我希望 URL 仍然显示 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”连接
【问题讨论】:
【参考方案1】:Zope 通过在路径中使用 VirtualHostMonster
标志,通过一些特殊的重写来支持您的场景开箱即用。这可确保 Zope(以及扩展名为 Plone)生成的任何 URL 对于代理请求也是正确的。
您应该同时使用mod_rewrite
和mod_proxy
,它们会协同工作。
为了更轻松地创建正确的重写 URL,有人构建了一个出色的 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,重写这些以从运行在 localhost 端口 8080 上的服务器提供服务,确保 Zope 生成具有相同根的 URL。
有关更多详细信息,请参阅 Zope wiki 上的 detailed documentation on the VirtualHostMonster feature。
【讨论】:
闪亮!我不知道那个重写女巫【参考方案2】:您可以使用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>
两者都完成了大致相同的事情。使用带有ProxyPass
的Location
块可以轻松地将其他配置指令应用于前端服务器上的此路径。
【讨论】:
好的,我以为我明白了,但它不起作用,让我们假设本地主机,(因为那是我目前唯一可以测试的地方)(子)域应该是无关紧要的,目前它返回一个 404(使用代理解决方案)欢呼 把你的实际配置放在问题中,包括前端和监听端口 8080 的任何东西。 Apache 文档推荐使用 ProxyPass:httpd.apache.org/docs/2.4/rewrite/avoid.html以上是关于Apache 重写或代理的主要内容,如果未能解决你的问题,请参考以下文章