我最近将我的家庭服务器设置为使用 CloudFlare(Ubuntu Server 16.04.1)。一切似乎都运行良好,非常棒。
然而,我有一个大问题,每次我access.log
在 Apache 中检查时,我都发现 CloudFlare 日志根本没有出现或更新。如果我直接连接到我的 IP 地址,access.log 会立即更新,但如果我通过 CloudFlare 域访问我的网站,则文件access.log
根本不会更新。
我真的很困惑,因为我不明白这是怎么可能的,我以为 CloudFlare 所做的就是更改传入的 IP,为什么它会阻止我的服务器记录它?
编辑:如果有帮助的话,我还将一堆这样的日志添加到我的access.log
文件中,不知道它们是否相关:
::1 - - [12/Dec/2016:13:37:26 +0000] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.18 (Ubuntu) (internal dummy connection)"
::1 - - [12/Dec/2016:13:37:27 +0000] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.18 (Ubuntu) (internal dummy connection)"
::1 - - [12/Dec/2016:13:37:28 +0000] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.18 (Ubuntu) (internal dummy connection)"
答案1
这里有两个主要潜在问题:
- 您正在访问缓存资源,但该资源未到达您的源服务器。如果您已设置“缓存所有内容”页面规则,Cloudflare 还将缓存静态 HTML。CF-Cache-Status 标头指示Cloudflare 是否正在缓存资源。
- 您没有正确记录访问者 IP。在 Apache 上,您应该确保安装 Mod_Cloudflare 扩展以确保您在日志中正确记录访问者 IP。
答案2
当您的网站流量通过 Cloudflare 网络路由时,它们充当反向代理。因此,在响应请求并记录请求时,您的源服务器将返回 Cloudflare IP 地址。
您可以通过启用来在 Apache2 中记录原始访问者 IP 地址mod_remoteip
。
启用模块:
sudo a2enmod remoteip sudo service apache2 restart
编辑 vhost 配置文件。默认文件是
/etc/apache2/sites-available/000-default.conf
。在<VirtualHost *:80>
和之间</VirtualHost>
添加以下行:RemoteIPHeader CF-Connecting-IP