Passing user’s IP address to apache httpd backend

สองวันก่อนได้อ่านข่าวว่า nginx ได้ขึ้นเป็นเว็บเซิร์ฟเวอร์อันดับที่ 2
ด้วยความสนใจและอยากลองมานานแล้ว ก็เลยได้เลิกงามยามดีเอามาจัดการทำเป็น reverse proxy ให้กับ apache httpd
ทุกอย่างดูราบรื่นดีแต่แล้วพ่อก็เดินมาถาม ทำไม IP คนเข้าเว็บพ่อมันเลขเดียวกันหมดเลยล่ะ
เราก็ห๊ะ เลขไหน อ้าวนี่มัน IP server เรานี่หว่า
ได้ความว่า ตัว nginx มันไป request จาก apache อีกทีนึง apache เลยเอา IP ของ nginx มาแทน ซึ่งก็คือเครื่องมันเอง
ลองไปหาใน google ดูก็ได้ทางออกว่า มันมี module ตัวนึงซื่อว่า rpaf (reverse proxy add forward module)
โดยปกติ proxy (ในที่นี้ใช้ nginx) จะส่งค่า X-Forwarded-For มาให้ด้วย ซึ่งเป็น IP ของ Client แต่ script ส่วนใหญ่จะใช้ค่า $_SERVER[“REMOTE_ADDR”]
เจ้า module ตัวนี้ก็จะเอา IP ที่แท้จริงส่งต่อไปให้
ว่าแล้วก็ลองมาติดตั้งกันเลย

wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xvfz mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
sed -ie ‘s/apxs2/apxs/’ Makefile
make rpaf-2.0
make install-2.0

เมื่อติดตั้งเสร็จแล้ว เราก็ต้องไปแก้ไขค่าคอนฟิกของ apache httpd ให้โหลด module ตัวนี้

LoadModule rpaf_module /usr/lib/apache/mod_rpaf-2.0.so

<IfModule rpaf_module>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 xxx.xxx.xxx.xxx \\สามารถใส่ได้หลาย IP
RPAFheader X-Forwarded-For
</IfModule>

เพียงเท่านี้ก็เรียบร้อยแล้วครับ