天天看點

Nginx反向代理Apache的情況下讓Apache獲得真實IP

自從Nginx出現以後, 我們都喜歡讓 Nginx 跑在前方處理靜态檔案, 然後通過 proxy 把動态請求過濾給 apache.

那麼就會出現個問題, 跑在後方 apache 上的應用擷取到的訪客IP都是Nginx所在伺服器的IP , 或者是本機 127.0.0.1 .

最明顯就是檢視 apache 的通路日志.就會見到來來去去都是内網的IP.

如果你的應用有諸如, "單個IP不能重複登陸”, "單個IP注冊相隔n分鐘”... 之類用于IP判别的安全規則.

這麼就麻煩了....

但還好, 你可以通過修改 nginx proxy 的參數令後端應用擷取到 Nginx 發來的請求封包擷取到外網的IP.

proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

但這解決的問題單單隻是應用上, apache 日志上所擷取的ip依然還是本地.

這個時候就需要配合apache的一個第三方子產品"mod_rpaf"了, 官方網站: http://stderr.net/apache/rpaf/

安裝方法:

wget 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 /opt/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c