やればできる!Apacheリバースプロキシ+WordPress

ユーザがアクセスするApacheと、WordPressを稼働させるApacheを分離しておきたいことがあります。静的コンテンツをフロントエンドのApacheに処理させて、動的な処理が必要なコンテンツのみ、別サーバでWordPressに処理させたりしたいことがあるからです。その場合は、Apacheのmod_proxyなどを使って、リバースプロキシを有効にしてつなげます。


このとき、デフォルトの設定ではWordPressがきちんと動作しないので、いくつかwp-config.phpに設定を追加する必要あります。WordPress 3.1.3では、いくつかの変数を指定することができるようになっているので、これらをきちんと設定することにより、リバースプロキシ対応ができます。

https://example.jp/wp/ でWordPressを公開したいとして、フロントエンドのApacheではHTTPSを使い、WordPressを稼働するApacheではHTTPで接続させるとしましょう。この場合は、次のような設定を追加すれば稼働します。公開はHTTP、管理はHTTPSといった複雑な構成としたい場合はさらに工夫が必要になるはずです。FORCE_SSL_ADMIN という変数も指定できるようなので、調べてみると良いでしょう。

WP_SITEURLや、WP_HOMEで、WordPressのURL指定を明示的にしています。wp-contentについてもHTTPSを使っているということがわかるように、明示的に指定をしています。$_SERVER[]の値に影響される関数もあるようなので、HTTP_HOSTとREMOTE_ADDRについてはリバースプロキシとなっているホストの情報が使われないようにHTTP_X_FORWARDED_のものを指定する必要があります。一部の関数では$_SERVER['HTTPS']の値がどうなっているかによって、プロトコルを自動判定してしまうものがあるようなので、これも指定しています。

define('WP_SITEURL', 'https://example.jp/wp/'); 
define('WP_HOME', 'https://example.jp/wp/'); 
define('WP_CONTENT_URL', 'https://example.jp/wp/wp-content');

$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
$_SERVER['HTTPS'] = 1;

たったこれだけでApacheリバースプロキシ+WordPressが実現できますから、活用しましょう。

同じタグの記事: Apache
同じタグの記事: WordPress
同じカテゴリの記事: General
関連書籍: Apache
関連書籍: WordPress