IIS の ARR で WordPress のリバースプロキシ

Server
ReverseProxy by ARR

備忘録と情報交換を目的に WordPress でローカルにblogサーバーを構築し,外部からのアクセスは,既存のSSL導入済みのIIS(Internet Information Service) からのリバースプロキシ経由で行えるよう,随分前から色々な設定を試していたのだが,やっと上手くいったのでその方法を書き留めておきます.

まず,システムの構成は以下の通り,ごく単純なもの.

ReverseProxy by ARR

ReverseProxy by ARR

最初は,ARRの機能を使って徹底的に Outbound 方向 の通信のタグを書き換える,Wordpress自体には何も手を入れないやり方を試したのだが,サイト管理画面へ遷移するときにどうしてもローカルアドレスにリダイレクトされてしまうし,Javascriptが絡む部分でローカルアドレスが含まれるHTMLが返されてしまう.

もちろん,Wordpress のソースコードを読むかパケットをキャプチャするかして,徹底的にやればできるのかも知れないが,そこまでやりたくないしなぁ,ということで,色々ググってみたが,そもそも ARR をリバースプロキシとして用いて WordPress を使うという例が(私と同様の問題を抱えているのは別にして)見つからない.

仕方ないので,Apache の mod_rewrite の例を参考に次のように設定することで上手くいっているぽい.

まず,ARRは受信側の規則のみ設定する.外部には https://xxx.xxx.xxx/wordpress ,ローカルには,blogsv.xxx.local/wordpress で公開する場合は以下の図の通りに設定する.

受信規則の設定

受信規則の設定

次にローカルのサーバー(blogsv.xxx.local)のWordpressの設定ファイルである wp-config.php の先頭部分に,

//SSL通信判定。SSLで通信されたらhttpsにする。
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
define('WP_HOME', 'https://xxxx.xxxx.xxxx/wordpress');
define('WP_SITEURL', 'https://xxxx.xxxx.xxxx/wordpress');
$_SERVER['HTTPS'] = 1;
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

を追加する.

要は,リバースプロキシ経由かどうかを HTTP_X_FORWARDED_FOR で判定して,もしそうなら,SSLを強制し,そもそもの WordPress アドレスとサイトアドレスの設定自体を書き換えてしまうというかなり無理やりな方法で,元々のタグを一つ一つ書き換える方法に比べると無理やり感がありありだが,これで不具合なくローカルからもグローバルからも使えてるっぽい.

Server
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました