ฉันใช้ Nginx front-end สำหรับไฟล์สแตติกและพร็อกซีไปที่ Apache backend สำหรับ PHP และ Passenger โดยใช้ mod_rpaf ของ Apache เพื่อตั้งค่า IP แอดเดรสรีโมตที่ถูกต้องบนแบ็กเอนด์ ทุกอย่างทำงานได้ดีจนกระทั่งฉันอัพเกรดเป็น Ubuntu 12.04 (แม่นยำ) ตอนนี้ Apache รายงานการเชื่อมต่อทั้งหมดที่มาจาก 127.0.0.1
นี่คือการกำหนดค่าที่เกี่ยวข้อง ไม่มีอะไรเปลี่ยนแปลงที่นี่กับการอัพเกรด
Nginx:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
mod_rpaf:
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 ::1
RPAFheader X-Forwarded-For
</IfModule>
ฉันใช้%{X-Forwarded-For}i
ในคำสั่ง Apache LogFormat และบันทึกการเข้าถึงแสดงที่อยู่ระยะไกลที่ถูกต้องดังนั้นฉันรู้ว่า Nginx กำลังส่งที่อยู่อย่างถูกต้อง
ในการphpinfo()
ทดสอบ HTTP_X_FORWARDED_FOR แสดงที่อยู่ระยะไกลที่ถูกต้อง แต่ REMOTE_ADDR คือ 127.0.0.1 สิ่งนี้สะท้อนให้เห็นในแอปพลิเคชัน PHP เช่นกันเช่นความคิดเห็นของ WordPress
ฉันได้ลองเปลี่ยน Nginx และ mod_rpaf เป็น X-Real-IP โดยไม่มีผลกระทบ
มีอะไรเปลี่ยนแปลงหรือเปล่าที่ฉันพลาดไป?
ข้อมูลรุ่นที่เกี่ยวข้องทุกอย่างที่ติดตั้งจากที่เก็บ Ubuntu:
Nginx 1.1.19
Apache 2.2.22
mod_rpaf 0.6