字體:  

讓 nginx proxy 代理後端的 apache 獲取訪客真實IP

becky98 發表於: 2019-1-09 10:57 來源: ADJ網路控股集團


很多網站都會有偵測使用者 IP 的功能,不管是判斷使用者來自哪邊,或者是記錄使用者的位置。

而當你使用 nginx proxy 來當代理伺服器後,Apache log 的連線IP都變成 proxy 的IP了
不過 proxy 會將真實IP記錄在 Header 的 X-Forwarded-For
所以我們可以這樣做...來取的真實IP

(1)proxy 端的 nginx配置文檔

QUOTE:



...
        location / {

            .....
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;

            proxy_pass http://111.222.333.444;

        }


(2)源頭 apache 配置 httpd.conf

添加%{X-FORWARDED-FOR}i
Apache日誌配置文檔中定義了兩種打印格式,分別為combined格式和common格式。
這邊使用combined格式

QUOTE:


找到這一行
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

將 %h 用 %{X-FORWARDED-FOR}i 取代
LogFormat "%{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


(3)虛擬機配置

QUOTE:


<VirtualHost *:80>
    ...
    CustomLog logs/all-web-log.com.tw.access.log combined
</VirtualHost>


httpd 重啟後就可以囉~

後端Apache日誌獲取前端Nginx反向代理的真實IP地址
https://hk.saowen.com/a/d4fc4dca5fc038b2f4e2107b5acf2b6b192793a78c393c02b592ce51a2611e89