HTTP_X_FORWARDED_SERVERは複数サーバ名が出てくることがある
リバースプロキシを置くと、オリジンサーバでは、PHPで言うところの$_SERVER['HTTP_X_FORWARDED_SERVER']にプロキシサーバ名が入ってきます。
これは、HTTPヘッダのX-Forwarded-Serverから得ています。
ここにはサーバ名が単独で入っているとは限らないことを、最近になって知りましたorz
コンマ(正確には", ")区切りでサーバ名が並びます。並び順は、クライアントに近い順からになります。よって以下のようになります。
X-Forwarded-Server: (クライアントに近いサーバ), ..., (オリジンサーバに近いサーバ)
リバースプロキシサーバとオリジンサーバが直でつながる場合には、次のようになります。
X-Forwarded-Server: (クライアントに近いサーバ), ..., (リバースプロキシサーバ=代表サーバ)
これを踏まえて、代表サーバ名を得るスクリプトの一部は次のようになります。
$arr_fs = explode(',', $_SERVER['HTTP_X_FORWARDED_SERVER']); if( count($arr_fs) >= 1 ) { $hostname = trim(end($arr_fs)); }
これを確認する方法ですが、プロキシサーバを追加するのは意外と面倒です。
よって、次のように、telnetで80番と直接対話して、その際にHTTPヘッダにX-Forwarded-Server入れて送ります。
telnet XX.XX.XX.XX 80 GET http://foo/bar HTTP/1.0 X-Forwarded-Server: YY.YY.YY.YY