我有一个 apache2 网络服务器,用于处理在另一台机器上运行的 Rails3 应用程序的反向代理。
设置成功,只是 webapp 中生成的 URL 不会被我的 mod_proxy_html 配置重写。
这“反向代理场景”正是我想做的事情,因此我已尽我所能完全遵循了本教程。
我已经应用或尝试了提供的答案这里在 stackoverflow 上,没有效果。
根据“反向代理方案”,您需要加载多个模块。所有这些说明都在我的 httpd.conf 文件中,当我检查
apactectl -t -D DUMP_MODULES
所有预期的模块都显示在列表中。
我执行反向代理的外部Web服务器位于www.ourdomain.org,Rails应用程序在apphost.local内部可用(服务器是Mac OS X Server 10.6,rails应用服务器是Mac OS X 10.6)。
现在正在进行的是通过反向代理访问 Web 应用程序:
http://www.ourdomain.org/apphost/railsappname/controllername/action
但是没有任何 javascript 文件、css 文件或其他资产被加载,并且 Web 应用程序内部的链接缺少 URL 的 apphost 部分,就好像我的重写规则配置不正确一样(所以我当然关注这一点,并且似乎无法在将 html 从 apphost 传入并通过 Apache 服务器传出的过程中添加或删除任何内容)。
例如,将鼠标悬停在 Web 应用程序返回的 html 中的操作链接上,您将获得:
http://www.ourdomain.org/railsappname/controllername/action
以下是我的 Apache 指令:
LoadModule proxy_html_module /usr/libexec/apache2/mod_proxy_html.so
LoadModule xml2enc_module /usr/libexec/apache2/mod_xml2enc.so
ProxyHTMLLogVerbose On
LogLevel Debug
ProxyPass /apphost/ http://apphost.local/
<Location /apphost/>
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyPassReverse /
ProxyHTMLExtended On
ProxyHTMLURLMap railsappname/ apphost/railsappname/
RequestHeader unset Accept-Encoding
</Location>
每次对 httpd.conf 进行更改后,我都会虔诚地检查 apachectl -t,以确保正确性。
我绝对不是 Apache 专家,但我后面的所有指令似乎都无法推翻我在这里所做的。但是,当我向 Apache 服务器发送针对我的 Web 应用的请求后,我尝试的所有方法似乎都无法改变我在浏览器中看到的 URL。
即使您不知道我做错了什么,我也欢迎您提出一些想法,让 Apache 帮助查看它正在处理什么以及对来自我的 Web 应用程序的 html 做了什么。这就是我理解的 ProxyHTMLLogVerbose On 和 LogLevel Debug 的设置,但我在日志文件中看不到任何东西。
答案1
也许答案有点简单,但到目前为止,我见过的大多数(如果不是全部)ProxyHTMLURLMap指令在匹配/替换模式的开头都有一个/。您是否尝试过这种配置变体?
ProxyHTMLURLMap /railsappname/ /apphost/railsappname/
如果这没有帮助,您正在运行哪个版本的 apache?如果适用,哪个版本的模块?它自 apache 2.4 开始才与 apache 捆绑在一起,因此对于旧版本的 apache,您必须自己安装(某个版本的)此模块。
另外,您也可以切换到 mod_substitute,尽管它需要比 mod_proxy_html 更多的配置。
在某些时候,他们删除了一些内置配置,这需要您自己添加。请参阅http://apache.webthing.com/svn/apache/filters/proxy_html/proxy_html.conf,ProxyHTMLLinks 和 ProxyHTMLEvents 指令是您需要添加到配置中的指令。