[英]Getting Apache 2.4 access logs to show client IP instead of 127.0.0.1 with Varnish using mod_remoteip
[英]Why apache access logs show request client IP as my server's IP?
正如主題所說,我在 apache 的原始訪問日志中看到了這樣的條目:
XXX.XXX.XXX.195 - - [07/Jan/2022:11:12:45 +0200] "GET /index.php HTTP/1.1" 200 9487 "https://www.my_domain.com/index.php " "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
XXX.XXX.XXX.195 - - [03/Feb/2022:16:29:23 +0200] "GET /contact.php HTTP/1.1" 200 10057 "https://www.my_domain.com/contact.php " "Mozilla/5.0 (Linux; Android 11; SM-A515F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.87 Mobile Safari/537.36"
等等等等
但是 XXX.XXX.XXX.195 = 我的服務器的 IP 地址,它顯示的是這個,而不是客戶端的 IP。
來自apache 文檔:
這是向服務器發出請求的客戶端(遠程主機)的 IP 地址。 如果 HostnameLookups 設置為 On,則服務器將嘗試確定主機名並將其記錄在 IP 地址的位置。 但是,不建議使用此配置,因為它會顯着降低服務器速度。 相反,最好使用 logresolve 等日志后處理器來確定主機名。 這里報告的IP地址不一定是用戶所在機器的地址。 如果用戶和服務器之間存在代理服務器,則該地址將是代理的地址,而不是始發機器。
我的服務器上沒有運行代理,每天只有 10-20 次點擊,我想知道為什么會發生這種情況。
Apache 日志格式:見https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
%a Client IP address of the request (see the mod_remoteip module).
%{c}a Underlying peer IP address of the connection (see the mod_remoteip module).
%A Local IP-address.
如果您使用本地代理(例如 apache/nginx 用於 nodjs 服務器),您需要檢查 x-forwarded-for 和 x-forwarded-host HTTP 標頭
SetEnvIfNoCase X-Forwarded-For "." from_proxy=1
CustomLog logs/access.log combined env=!from_proxy
CustomLog logs/access.log combined_forwarded env=from_proxy
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_forwarded
%h remote ip
%{X-Forwarded-For}i proxy IP
請發布您使用中的完整 Logformat 設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.