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_rewritemod_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_rewriteP(代理)规则或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>

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

【讨论】:

好的,我以为我明白了,但它不起作用,让我们假设本地主机,(因为那是我目前唯一可以测试的地方)(子)域应该是无关紧要的,目前它返回一个 404(使用代理解决方案)欢呼 把你的实际配置放在问题中,包括前端和监听端口 8080 的任何东西。 Apache 文档推荐使用 ProxyPass:httpd.apache.org/docs/2.4/rewrite/avoid.html

以上是关于Apache 重写或代理的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apache 在代理设置中重写位置响应标头?

添加代理通行证后,apache重写规则不起作用

带有代理和排除的 html5 pushstate 的 Apache 重写规则

IIS 反向代理到 ApacheTomcat

Apache 重写目录索引

wdlinux中apache配置反向代理模块