我正在尝试设置反向代理,以便从互联网访问多个内部 Web 服务器。我已经使用反向代理配置了一些基于名称的虚拟主机(我启用了 proxy 和 proxy_http 模块)。
到目前为止,一切都很好...
其中一台服务器恰好是 wordpress 网站。Wordpress 将生成包含其内部 url 的 html 页面(用于 css 等)。因此,我尝试使用 proxy_html 模块在反向代理上重写这些 url。但我失败了。
互联网上的大多数文档都涉及该模块的最新版本,但 12.04 附带 3.0.1 版本,我不知道如何使其工作。
以下是我在虚拟主机配置文件中输入的内容:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName example.com
ServerAlias www.example.com
ProxyPass / http://192.168.1.12/
ProxyPassReverse / http://192.168.1.12/
ProxyHTMLURLMap http://192.168.1.12 http://www.example.com
#SetOuputFilter INFLATE;proxy-html;DEFLATE
</VirtualHost>
我希望http://192.168.1.12
服务器 192.168.1.12 上的 wordpress 生成的任何包含 的 url 都被翻译成http://www.example.com
。但这并没有发生。我尝试添加其他指令,但都失败了:
ProxyHTMLEnable On
失败。它似乎太新了,并且不受此版本的模块支持。
SetOuputFilter INFLATE;proxy-html;DEFLATE
也失败了。也许我缺少一个模块来做这件事?我试过添加 a2enmod 过滤器,但它也不起作用……
好吧,有人可以启发我吗?
编辑SetOuputFilter
注意到了? A中的错误输入吨缺失... 这就是SetOutputFilter proxy-html
在 12.04 上让 proxy_html 工作的方法。但我宁愿选择另一种解决方案:告诉 wordpress 根据其公共名称行事并从一开始就生成正确的 url。
答案1
我一直告诉 Wordpress 我的站点地址是 example.com(这样 wordpress 创建的所有 URL 都没有 IP 地址),然后我的代理配置如下所示:
ServerName example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://192.168.1.1
ProxyPassReverse / http://192.168.1.1
保持简单。