我们的组织正在重建其网站。有人在新服务器上建立了新网站。在 /etc/hosts 中输入条目后即可访问。通过这种方式访问时,网站运行正常。
但由于大多数参与的人都不擅长使用计算机,所以我决定设置一个反向代理。
我无法访问该网站或托管该网站的服务器。我在那里安装了一个 Wordpress 编辑器帐户。
我在我的私人服务器的 /etc/hosts 中放入了一个条目,并使用以下配置设置了反向代理,我的服务器在 Debian 稳定版下运行 apache-2.2:
<VirtualHost *:80>
ServerName xxx.xxx.xxx.xxx
ProxyRequests off
ProxyPass /some/prefix/ http://site.example.com/
ProxyPassReverse /some/prefix/ http://site.example.com/
ProxyHTMLURLMap http://site.example.com/ http://xxx.xxx.xxx.xxx/some/prefix/
<Location /some/prefix/>
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLURLMap http://site.example.com/ /some/prefix/
</Location>
ProxyPassReverseCookieDomain site.example.com xxx.xxx.xxx.xxx
ProxyPassReverseCookiePath / /some/prefix/
ProxyHTMLExtended On
</VirtualHost>
几乎所有功能都正常。我无法发表新帖子(文本编辑器无法正确加载)。Iceweasel(Firefox)的开发者模式显示:
(...)
[00:13:33.365] GET http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js?wp-mce-4107-20141130 [HTTP/1.1 404 Not Found 399ms]
(...)
[00:13:33.648] Failed to load: http://xxx.xxx.xxx.xxx/some/prefix/wp-includes/js/tinymce/langs/pl.js
[00:13:46.733] POST http://xxx.xxx.xxx.xxx/wp-admin/admin-ajax.php [HTTP/1.1 404 Not Found 102ms]
我省略了非错误。在我看来,Apache 没有重写某些内容。有什么想法吗?
答案1
这是我针对您的情况的工作配置。
<VirtualHost *:80>
ServerName proxy.example.net
ProxyRequests off
ProxyPass /some/prefix/ http://backend.example.net/
ProxyPassReverse /some/prefix/ http://backend.example.net/
<Location /some/prefix/>
ProxyHTMLEnable On
ProxyHTMLExtended On
ProxyHTMLLinks a href
ProxyHTMLLinks area href
ProxyHTMLLinks link href
ProxyHTMLLinks img src longdesc usemap
ProxyHTMLLinks object classid codebase data usemap
ProxyHTMLLinks q cite
ProxyHTMLLinks blockquote cite
ProxyHTMLLinks ins cite
ProxyHTMLLinks del cite
ProxyHTMLLinks form action
ProxyHTMLLinks input src usemap
ProxyHTMLLinks head profile
ProxyHTMLLinks base href
ProxyHTMLLinks script src for
ProxyHTMLLinks iframe src
RequestHeader unset Accept-Encoding
ProxyHTMLURLMap /wp-admin/ /some/prefix/wp-admin/
ProxyHTMLURLMap \/wp-admin\/ \/some\/prefix\/wp-admin\/
ProxyHTMLURLMap http://backend.example.net/ http://proxy.example.net/some/prefix/
</Location>
ProxyPassReverseCookieDomain backend.example.net proxy.example.net
ProxyPassReverseCookiePath / /some/prefix/
# LogLevel warn proxy_html:trace3
ErrorLog ${APACHE_LOG_DIR}/errorprox.log
CustomLog ${APACHE_LOG_DIR}/accessprox.log combined
</VirtualHost>
一些解释
我必须设置,
ProxyHTMLLinks
因为下面的 apache 日志中有一些错误。配置是从这篇博文。[2014 年 12 月 21 日星期日 23:02:49.053825] [proxy_html:trace1] [pid 3368:tid 140385487116032] mod_proxy_html.c(823):[客户端 36.71.243.192:56711] 未配置任何链接:proxy-html 过滤器无需执行任何操作
参数
RequestHeader unset Accept-Encoding
用于替代参数SetOutputFilter INFLATE;proxy-html;DEFLATE
。效果是代理和真实 wordpress 之间的流量未被压缩。请参阅这一页了解详情。URL
wp-admin/admin-ajax.php
已由 javascript 定义并调用。参数ProxyHTMLExtended On
应该完成这项工作。wp-admin/admin-ajax.php
未定义域的URL (在 Firefox 中单击“查看页面源代码”时可以看到)。这导致参数http://site.example.com/ /some/prefix/
与此字符串不匹配。因此,我设置了新参数ProxyHTMLURLMap /wp-admin/ /some/prefix/wp-admin/
对于常规字符串。ProxyHTMLURLMap \/wp-admin\/ \/some\/prefix\/wp-admin\/
对于转义字符串。