ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

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