背景

最近为athbe.cn添加了一个网盘应用cloud.athbe.cn,顺便加上了Cloudflare。但是在测试的时候发现邮件无法发送。

我的博客网站使用WordPress搭建,为了实现异步发送邮件,我使用了Mail Queue插件,该插件会通过WP Cron实现定时发送队列中的邮件。开启Cloudflare后,队列中的邮件无法发送。进一步排查原因后,发现所有WP-Cron任务都失效了。

根本原因

WP-Cron通过定时访问/wp-cron.php来实现定时任务,开启Cloudflare后,服务器访问域名需要再次经过Cloudflare的路由,导致响应速度非常慢(即使这个资源就在本地),最终超时了。

也许服务器在境外的话就不需要考虑这个问题?

解决方案

网上找到的资料全是AI生成的废话,找到问题的根源花了我不少时间。既然问题的根源已经确定,解决方案就很简单了,修改服务器的host文件,使其访问目标域名时绕过Cloudflare就好了。

编辑/etc/hosts

sudo nano /etc/hosts

在其中加入下面的内容。

xxx.xxx.xxx.xxx example.com #替换为实际的IP和域名
#或者更激进一点,直接修改为本地回环地址,这样应该会更快
#127.0.0.1 example.com

此时服务器在访问目标域名时,就不会经过Cloudflare,WP-Cron可以正常工作了。