我有一个在Cloudflare后面运行的网站,它是一个反向代理。这意味着我只能在访问日志中获得一个或两个IP地址。
但是,Cloudflare确实在请求标头中提供了访问者IP地址,我假设我可以在访问日志中记录而不是标准的。
我知道如何使用CustomLog
,但有没有办法在Apache访问日志中保存HTTP标头?
感谢。
答案 0 :(得分:17)
是的 - 看一下文档 - http://httpd.apache.org/docs/2.2/mod/mod_log_config.html,特别是
的条目%{Foobar}i
哪会让你知道:
Foobar的内容:请求中的标题行发送给 服务器。其他模块(例如mod_headers)所做的更改会影响这一点。 如果您对大多数情况下请求标头的内容感兴趣 模块会修改它,使用mod_setenvif复制标头 进入内部环境变量并使用。记录该值 %{VARNAME} e如上所述。
因此,人们通常会在CustomLog条目中添加一些像“...%{X-Forwarded-For-IP} i”这样的条目。
将'X-Forwarded-For-IP'替换为您的cloudflare服务获取您(通常类似于''“CF-Connecting-IP”''); e.g。
LogFormat "%v %{CF-Connecting-IP}i (via cloudflare:%h) %l %u %t \"%r\" %>s %b" cloudflare
CustomLog "|rotatelog.. etc" cloudflare
关于'transferlog' - 请参阅TransferLog Directive附近的注释 - 它会获取最新定义的版本。
DW传递。