Web、サーバ、ソフトウェア、バグ・脆弱性 などの情報を何人かで集まって書いていく IT/Web情報系ブログ

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も居たはず。

- Apache2, Nginx , ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事