2014/11/13

在reverse proxy後取得原始客戶端ip


首先文章以以下代稱
Nginx代表的是Reverse proxy server
Apache代表的是Backend server

透過Nginx反向代理Apache

通常在Apache拿到的Client IP會是這個Nginx的IP


為了將Client IP(Remote IP)傳送到Apache

我們必須在Nginx與Apache做點設定

Nginx端的設定:

proxy.conf

proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
此設定是為了將Client IP放到往Apache送的Request header中

但是單單做這樣的這定Apache的log還是不會紀錄Nginx的IP

以下重要的來了

Apache端必須安裝mod_rpaf這個套件


sudo apt-get install libapache2-mod-rpaf

接著編輯rpaf.conf


<IFModule mod_rpaf-2.0.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 ::1 #這邊加上Nginx的IP
RPAFheader X-Forwarded-For
</IfModule>

將Nginx與Apache重啟後
Apache的log就會記錄真正的Client IP了

沒有留言:

張貼留言