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