そんな環境で Shibboleth IdP を立ててるんだけど、どうやら ELB の IP アドレスが
DNS に 2 つ(Multi-AZ分)登録されていてラウンドロビンしてしまっている。
すると、Shibboleth IdP は以下のエラーを吐き認証が通らない。
Client sent a cookie from address 192.168.1.15 but the cookie was issued to address 192.168.2.17
ELB がソース IP を自身のものに書き換えてしまうのは知っていたが、これが Multi-AZ
だとアクセスする毎に変わってしまう。DNS のラウンドロビンのせいで。
tomcat の server.xml の Engine タグ内に以下の設定を入れて回避。
<Valve
className="org.apache.catalina.valves.RemoteIpValve"
internalProxies="192\.168\.\d+\.\d+"
remoteIpHeader="x-forwarded-for"
proxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />
Apache の mod_remoteip で回避する方法もあるかも知れんが、今回は Cent6 であり、
Apache2.2 な世界なので標準で mod_remoteip が入っていないので tomcat で回避す
ることにした。