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了

沒有留言:

張貼留言