以前の記事で、nginx のリバースプロクシ機能を使い、Apache を裏方として動かすことにしたのですが、そうなると一つ問題がありました。Apache のログに記される要求元アドレスが全て nginx のアドレス、つまり 127.0.0.1
になってしまうのです。
127.0.0.1 - - [29/Jul/2012:21:00:40 +0900] "GET /2012/07/mountain-lion-apache.html HTTP/1.0" 200 6823 "https://blog.delphinus.dev/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1" 127.0.0.1 - - [29/Jul/2012:21:00:40 +0900] "GET /styles.css HTTP/1.0" 200 1063 "https://blog.delphinus.dev/2012/07/mountain-lion-apache.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1" 127.0.0.1 - - [29/Jul/2012:21:00:40 +0900] "GET /mt.js HTTP/1.0" 200 9601 "https://blog.delphinus.dev/2012/07/mountain-lion-apache.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1"
nginx が Apache へリクエストする際には X-Forwarded-For
ヘッダに要求元の IP アドレスを載せていますから、このアドレスを Apache のログにそのまま記してくれればいいわけです。
それをやってくれるのが mod_rpaf
モジュールです。
mod_rpaf for Apache
http://stderr.net/apache/rpaf/
Apache 2.0 対応という割と古いモジュールですが、Apache 2.2 環境下でも問題なく動いています。
インストール
$ curl -LO http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz $ tar zxvf mod_rpaf-0.6.tar.gz $ cd mod_rpaf-0.6.tar.gz $ vim Makefile
Makefile
を修正します。色の付いた部分に apxs
の正しいパスを入れてください。
# Makefile for mod_rpaf.c (gmake) # $Id: Makefile 16 2007-12-13 03:40:22Z thomas $ APXS=$(shell which apxs) APXS2=/usr/sbin/apxs default: @echo mod_rpaf: @echo nevest version available at http://stderr.net/apache/rpaf/ @echo @echo following options available:
あとは make
& make install
するだけでインストール完了です。
# Apache 2.2 だけど 2.0 を指定 $ make rpaf-2.0 $ make install-2.0
Apache の設定
httpd.conf
のどこかに以下のように記述してください。
LoadModule rpaf_module libexec/apache2/mod_rpaf-2.0.so RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 10.0.0.1 RPAFheader X-Forwarded-For
Apache を再起動すると、IP アドレスが正常に記されるようになりました。