私たちの組織はそのサイトを作り直しています。誰かが新しいサーバーに新しいサイトをセットアップしました。/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は何かを書き直していないようです。何か案は?
ここにあなたのケースのための私の働く設定があります。
<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\/
。