Nginx+Apache2.4でアクセス元のIPアドレスを取得する方法
投稿日: 投稿者:ktm@s
引越しを機に爆誕したnk.鯖を間借りした。
ゲストOSにはいつも通りDebianを選び、Apache2.4をインストールしてWordPressサイトを別のサーバーから移転させたのだが、Limit Login Attemptsという管理画面へのブルートフォースアタックの対策プラグインにより、めでたく自分が締め出された(ありがち)。
原因はNginxをフロントエンドで使っているため、Apache2側にはNginxのIPアドレスが渡るという事だ。
久しぶりすぎてすっかり忘れていた。
自鯖の設定ファイルを眺めて割りと一瞬で解決したのだが、いつかまたハマる筈なので備忘録として記事にしておく。
前提
- Nginx1.6.x
- Apache2.4
- Debian jessie 64bit
- これがベストな設定かは知らない
スポンサーリンク
Nginx側の設定
/etc/nginx/conf.d内か/etc/nginx/sites-available内にあるはずの目的の設定ファイルを編集する。
location{}内に以下を追記。
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host;
そして再起動。
sudo /etc/init.d/nginx restart
Apache2側の設定
/etc/apache2/apache2.confを編集する。
だいぶ下のほうにログフォーマットを指定している部分があるので、一応コメントアウトして以下を追記する。
%hを%aに変えてるだけなので、独自のフォーマットに変えてる人はそのように。
LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
さらに最下行にでも以下を追記する。
RemoteIPTrustedProxyにはNginxのIPアドレスを入れる。大体192.168ではじまるアレ。
<IfModule remoteip_module> RemoteIPHeader x-forwarded-for RemoteIPTrustedProxy xxx.xxx.xxx.xxx </IfModule>
忘れずにmod_remoteipを有効にしてApache2の再起動。
Apache2.4標準モジュールのはずなのでインストール方法は書かない(知らない)。
sudo a2enmod remoteip sudo systemctl restart apache2
あとがき
この手順で無事にアクセス元のIPアドレスを取得できた。
ホストに関しては使えなくて面倒とかいう話をどこかでみたことがある気がする。
対応モジュールを作ってGitHubかなんかに置いてるGODも居たはず。