簡體   English   中英

為什么 apache 訪問日志顯示請求客戶端 IP 作為我服務器的 IP?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM