Apache Log 记录真实IP

需求

有一台服务器 A,有一台虚拟机 B。A 反向代理到 B 上。B 里面的 Apache Log 记录的访问 IP 都是 A 的 IP,很不爽。

解决

  1. 启用 mod_remoteip 模块
  2. 打开 httpd.conf
  3. 查找 LogFormat
  4. %h 全都替换成 %{X-Forwarded-For}i , 或者在 %h 后面加上 %{X-Forwarded-For}i
  5. 保存退出,重启 Apache 服务

后记

Google 上有人不推荐直接全部替换 %h,也有一些教程说还要自己写一段代码来设置 X-Forwarded-For 变量,还有的是把走 Proxy 的和不走 Proxy 的分开来记录。最后我发现,只要把 %{X-Forwarded-For}i 加进去就好了,并不会出现什么冲突,而且不麻烦。

有人说只需要开启 mod_remoteip 就行,其他任何东西都不用动。但是测试发现,并不行。

在 Apache 2.4 中,没必要加上 “从 head 里面提取 X-Forwarded-For ,再进行赋值” 这个操作。

参考资料

  1. Logging Actual Client IP Address on the Apache Server

发表评论

电子邮件地址不会被公开。 必填项已用*标注