Cloudflare 可以为网站提供免费的 CDN 和 DDoS 防护,但在使用时 Apache 获取到的 IP 地址将是 Cloudflare 的,而不是访问者的真实客户端 IP。如果希望在 Web 服务器的日志中记录真实客户端 IP 或者根据 IP 进行访问控制的配置,则可以使用 mod_remoteip
模块来获取真实客户端 IP,本文将在 CentOS 7上完成这一个过程。
启用 mod_remoteip 模块
Apache 2.4.6默认已经包含了 mod_remoteip
模块,打开 /etc/httpd/conf/httpd.conf
配置文件,添加以下配置即可加载 mod_remoteip
。
1 | LoadModule remoteip_module modules/mod_remoteip.so |
定义可信代理地址
新建 /etc/httpd/conf.d/remoteip.conf
文件,包含 RemoteIPHeader CF-Connecting-IP
,然后再添加可信代理地址,在 Cloudflare 已经给出了其当前 IP 范围的 IPv4 和 IPv6 列表。
1 | RemoteIPHeader CF-Connecting-IP |
自定义日志格式
打开 /etc/httpd/conf/httpd.conf
文件,默认的日志格式如下:
1 | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |
如果在日志中记录真实客户端 IP 就将远程主机 IP %h
替换为访问的客户端 IP %a
。如下所示:
1 | LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined |