LoginSignup
2
0

More than 1 year has passed since last update.

apache2.4、ELB下でのアクセス元IPの処理

Last updated at Posted at 2021-12-29

サイト中のあるエリアには、特定IP(例 000.000.000.000)からだけのアクセスを許可する場合、

apache設定

your-site.conf
<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となり、希望通りのアクセス制限が可能となる。

your-site.conf
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アドレスを知りたい場合

php
$_SERVER["REMOTE_ADDR"]

を用いるが、ELB化では、同じくELBのローカルIPになる。その場合、

php
$_SERVER["HTTP_X_FORWARDED_FOR"]

を用いることで、元のIPを取得できるが、上記の"RemoteIPHeader X-Forwarded-For"を記述することで、従来の記述($_SERVER["REMOE_ADDR"])にて、アクセス元IPを取得することが可能。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0