サイト中のあるエリアには、特定IP(例 000.000.000.000)からだけのアクセスを許可する場合、
apache設定
<Directory "/var/www/secret">
Require all denied
Require ip 000.000.000.000
</Directory>
と書けばOKだけど、ELB(ElasticLoadBalancing)下では、アクセス元がELBのローカルIPになるため、上記設定では制限が正しく動作しない。
RemoteIPHeader X-Forwarded-For
を、記述することで、apache側が識別するIPが、本来のIPとなり、希望通りのアクセス制限が可能となる。
RemoteIPHeader X-Forwarded-For
<Directory "/var/www/secret">
Require all denied
Require ip 000.000.000.000
</Directory>
【参考】https://dev.classmethod.jp/articles/access-limit-behind-elb/
RemoteIPHeaderは、LocationやDirectory等のディレクティブの中ではなく、グローバルコンテキストかVirtualHostの中に書く必要があります。送信元IPアドレスを自然に扱えるようになっているので、Apache2.4で送信元IPアドレスに対するアクセス制限を利用したい場合はこの書き方をするのが良さそうです。
PHP側の処理
おなじく、PHP側で、アクセス元のIPアドレスを知りたい場合
$_SERVER["REMOTE_ADDR"]
を用いるが、ELB化では、同じくELBのローカルIPになる。その場合、
$_SERVER["HTTP_X_FORWARDED_FOR"]
を用いることで、元のIPを取得できるが、上記の"RemoteIPHeader X-Forwarded-For"を記述することで、従来の記述($_SERVER["REMOE_ADDR"])にて、アクセス元IPを取得することが可能。