Nginx+Apache2.4でアクセス元のIPアドレスを取得する方法

Apache2

記事をご覧の方へ

現在vivibit.netは旧システムからの移行に伴い修正作業を行っています。
表示上の問題や軽微なエラーが発生する可能性がありますが、ご利用に問題はありません。
また、現在一部ファイルのダウンロードができなくなっています。
順次対応予定ですが、お急ぎの場合や問題を発見された場合はコメント欄でご指摘いただけると助かります。


引越しを機に爆誕した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{}内に以下を追記。

[code]
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;
[/code]

そして再起動。

[bash]
sudo /etc/init.d/nginx restart
[/bash]

Apache2側の設定

/etc/apache2/apache2.confを編集する。
だいぶ下のほうにログフォーマットを指定している部分があるので、一応コメントアウトして以下を追記する。

%hを%aに変えてるだけなので、独自のフォーマットに変えてる人はそのように。

[code]
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
[/code]

さらに最下行にでも以下を追記する。
RemoteIPTrustedProxyにはNginxのIPアドレスを入れる。大体192.168ではじまるアレ。

[code]
<IfModule remoteip_module>
RemoteIPHeader x-forwarded-for
RemoteIPTrustedProxy xxx.xxx.xxx.xxx
</IfModule>
[/code]

忘れずにmod_remoteipを有効にしてApache2の再起動。
Apache2.4標準モジュールのはずなのでインストール方法は書かない(知らない)。

[bash]
sudo a2enmod remoteip
sudo systemctl restart apache2
[/bash]

あとがき

この手順で無事にアクセス元のIPアドレスを取得できた。

ホストに関しては使えなくて面倒とかいう話をどこかでみたことがある気がする。
対応モジュールを作ってGitHubかなんかに置いてるGODも居たはず。

コメント

タイトルとURLをコピーしました