WordPressをリバースプロキシを使ってバックエンドサーバで動かす

Wordpressをリバースプロキシを使ってバックエンドサーバで動かす WordPress

リバースプロキシの後ろにいるバックエンドの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はリバースプロキシ環境では動かしにくいですが、なんとか動かすことができました。では。