反向代理背后的 Wordpress

反向代理背后的 Wordpress

我们的组织正在重建其网站。有人在新服务器上建立了新网站。在 /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 之间的流量未被压缩。请参阅这一页了解详情。

  • URLwp-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\/对于转义字符串。

相关内容