web-dev-qa-db-ja.com

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は何かを書き直していないようです。何か案は?

7
lynx

ここにあなたのケースのための私の働く設定があります。

<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>

いくつかの説明

  • 以下のApacheログにいくつかのエラーがあるため、ProxyHTMLLinksを設定する必要があります。設定は このブログ投稿 からリッピングされました。

    [Sun Dec 21 23:02:49.053825 2014] [proxy_html:trace1] [pid 3368:tid 140385487116032] mod_proxy_html.c(823):[client 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がこの作業を行う必要があります。

  • ドメインなしで定義されたURL wp-admin/admin-ajax.php(Firefoxで[ページのソースを表示]をクリックすると表示されます)。これにより、パラメータhttp://site.example.com/ /some/prefix/がこの文字列と一致しません。そこで、新しいパラメータを設定しました

    • ProxyHTMLURLMap /wp-admin/ /some/prefix/wp-admin/は通常の文字列です。
    • エスケープされた文字列の場合はProxyHTMLURLMap \/wp-admin\/ \/some\/prefix\/wp-admin\/
2
masegaloeh