リバースプロキシの後ろにいるバックエンドのAPサーバでWordpressを動かした時のナレッジメモです。一旦これで無事にサイトは稼働しました。
■今回の環境
フロントエンドは普通のサーバ。バックエンドのAPサーバはさくらインターネットのレンタルサーバを利用するという結構特殊な環境でした。
フロントのAPサーバはapacheで、mod_proxyを利用しています。
■今回実現したいことの概要
http://www.example.com/xxxxにアクセスしたら、バックエンドサーバのさくらインターネットのサーバのwordpressにリバースプロキシでアクセスする。
外から見た時はhttp://www.example.com/xxxxでアクセスしたように見える。
という感じです。更に、今回はSSL通信が必要なフォームも存在しているので、更にややこしかったです。
■Wordpress設定の変更箇所
wp-config.phpの先頭部分に以下を記述しました。この設定で上記のことは問題なく設定出来ました。
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
$_SERVER['REQUEST_URI'] = '/xxxx' . $_SERVER['REQUEST_URI'];
$_SERVER['SCRIPT_NAME'] = '/xxxx' . $_SERVER['SCRIPT_NAME'];
$_SERVER['PHP_SELF'] = '/xxxx' . $_SERVER['PHP_SELF'];
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
//SSL通信判定。SSLで通信されたらhttpsにする。
if(isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])){
define('WP_HOME', 'https://www.example.com/xxxx');
define('WP_SITEURL', 'https://www.example.com/xxxx');
$_SERVER['HTTPS'] = 1;
} else {
define('WP_HOME', 'http://www.example.com/xxxx');
define('WP_SITEURL', 'http://www.example.com/xxxx');
}
今回はSSLでの通信も混ざっているので、SSLが有効の状態で通信されたら、WordpressのベースURLをhttpsに書き換える。ということをしています。今回は、さくらインターネットの共有サーバSSLを使ったので、上記のような判定方法になりました。
これで、リバースプロキシ側の設定が正しく設定されていれば、http://www.example.com/xxxxでアクセスした時にさくらインターネット側のワードプレスが動きます。
■上記の設定だけでアクセスできなかったら
.htaccessも確認してみてください。たまにプラグインが書き換えてしまっている時があります。うーむ。。。
WordPressはリバースプロキシ環境では動かしにくいですが、なんとか動かすことができました。では。