很多網站都會有偵測使用者 IP 的功能,不管是判斷使用者來自哪邊,或者是記錄使用者的位置。
而當你使用 nginx proxy 來當代理伺服器後,Apache log 的連線IP都變成 proxy 的IP了
不過 proxy 會將真實IP記錄在 Header 的 X-Forwarded-For
所以我們可以這樣做...來取的真實IP
(1)proxy 端的 nginx配置文檔
引用:
...
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格式
引用:
找到這一行
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)虛擬機配置
引用:
<VirtualHost *:80>
...
CustomLog logs/all-web-log.com.tw.access.log combined
</VirtualHost>
httpd 重啟後就可以囉~
後端Apache日誌獲取前端Nginx反向代理的真實IP地址
https://hk.saowen.com/a/d4fc4dca5fc038b2f4e2107b5acf2b6b192793a78c393c02b592ce51a2611e89