WordPressとReverseProxyを用いて接続元を正しく表示する方法

スポンサーリンク
もっとすっきりした方法を見つけましたので、こちらからどうぞ

ついこの間恐ろしく簡単なSquidを用いたReverseProxyをインストールしました。

インストールしたあと、

Apacheのログ出力もX-Forwarded-forを使うことで問題なく解決できたし、
GoogleAppsはJavaScriptのはずなので、接続元クライアント側で起動するわけで
ReverseProxyの問題はない。よし、、って思っていた。

だがしかし・・・

WordPressへのコメント時の接続元IPアドレスが
ReverseProxyのIPアドレスになっているのであった!!

これは、WordPress(PHP)が、接続元の情報を「$_SERVER[‘REMOTE_ADDR’]」で取得しているのがキーポイント。なぜなら接続元IPアドレスはReverseProxyサーバーであることにはかりはなく、その前の接続元IPアドレスを確認する必要があるからだ。

そこで、「$_SERVER[‘REMOTE_ADDR’]」のほかに、

$_SERVER[HTTP_X_FORWARDED_FOR]

を用いて、ReverseProxyを通過する前の接続元情報を取得して、
取得した値を「$_SERVER[‘REMOTO_ADDR’]」として認識するように設定します。

この設定は、WordPressのアップデートを行っても変更されない
「WordPressをインストールしたディレクトリ/wp-config.php」に追記します。

# cd WordPressをインストールしたディレクトリ
# ls -la wp-config.php* 現在を確認
# cp -p wp-config.php wp-config.`date +%Y%m%d` バックアップ作成
# ls -ls wp-config.php* 作成したバックアップを確認
# vi wp-config.php 編集
<?php //以下赤字部分を挿入
// added for reverse proxy
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
  }
/**
* The base configurations of the WordPress.
*#

これで、後はコメント投稿テストをしてください。

ちなみに「$_SERVER[‘HTTP_X_FORWARDED_FOR’」をわざわざ「,」で分割(explode)し、その一番目にある値を接続元IPとして持ってきています。これが匿名Proxyなどからの接続においても支障なく対象できるようにするための記述です。

コメント

タイトルとURLをコピーしました