从Apache2迁移至Nginx后WordPress站点遇Cloudflare 512错误求助
首先,Cloudflare的512错误通常意味着源站(你的Nginx服务器)无法在规定时间内响应Cloudflare的请求,结合你Nginx日志只有启动信息的情况,咱们一步步排查:
1. 先绕开Cloudflare,直接验证源站可用性
先把域名的Cloudflare代理暂时关闭(改成DNS Only模式),直接用服务器公网IP访问站点,比如http://你的服务器IP:
- 如果直接访问也打不开,问题肯定出在Nginx或WordPress的本地配置上,和Cloudflare无关;
- 如果直接访问正常,那问题大概率在Cloudflare的规则设置,或者服务器防火墙限制了Cloudflare的IP段。
2. 检查Nginx的WordPress配置是否合规
你的WordPress部署在/var/www,确保Nginx站点配置文件(一般在/etc/nginx/sites-available/目录下)包含正确的规则,以下是标准的WordPress Nginx配置模板,你可以对比调整:
server { listen 80; server_name 你的域名; root /var/www; index index.php index.html index.htm; # 适配WordPress固定链接的核心规则 location / { try_files $uri $uri/ /index.php?$args; } # PHP请求处理规则,注意匹配你的PHP-FPM监听地址 location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 替换为你实际的PHP版本对应的套接字/端口 } # 禁止访问敏感的隐藏文件 location ~ /\.ht { deny all; } }
修改后记得执行sudo nginx -t检查配置语法,没问题就重启Nginx:sudo systemctl restart nginx
3. 确认PHP-FPM服务正常运行
Nginx本身不处理PHP请求,完全依赖PHP-FPM,所以必须确保这个服务状态正常:
- 执行
sudo systemctl status php7.4-fpm(替换为你的PHP版本),看是否显示active (running); - 如果未运行,启动服务:
sudo systemctl start php7.4-fpm,并设置开机自启:sudo systemctl enable php7.4-fpm; - 额外检查PHP-FPM配置文件(
/etc/php/7.4/fpm/pool.d/www.conf)里的listen项,要和Nginx配置中的fastcgi_pass完全一致。
4. 检查服务器防火墙与安全组
确保服务器的防火墙(比如ufw)允许80、443端口的入站请求;如果用了云服务商的安全组,也要同步开放这两个端口。另外,如果你之前设置过IP白名单,要把Cloudflare的所有IP段添加进去,避免被拦截。
5. 开启Nginx详细错误日志排查
当前你的Nginx日志只有启动信息,说明日志级别设置过高,修改Nginx主配置(/etc/nginx/nginx.conf)里的日志级别:
error_log /var/log/nginx/error.log warn; # 改成warn或debug,debug会输出更详细的调试信息
重启Nginx后再访问站点,查看/var/log/nginx/error.log,就能看到具体的错误细节(比如PHP连接失败、文件权限不足等)。
6. 修正WordPress目录文件权限
/var/www目录的权限配置错误也会导致站点无法响应,建议设置为:
- 目录权限:
755 - 文件权限:
644 - 所有者:
www-data:www-data(Nginx和PHP-FPM的默认运行用户)
执行以下命令批量调整:
sudo chown -R www-data:www-data /var/www sudo find /var/www -type d -exec chmod 755 {} \; sudo find /var/www -type f -exec chmod 644 {} \;
7. 检查Cloudflare的SSL配置(仅当直接访问IP正常时)
如果源站直接访问没问题,但Cloudflare代理后报错,重点检查SSL/TLS模式:
- 若服务器已配置有效的SSL证书(比如Let's Encrypt证书),建议设置为Full或Full (strict);
- 若服务器还没配置SSL,先临时切换为Flexible模式测试,后续再部署证书切换到更安全的模式。
按照以上步骤逐一排查,应该能快速定位并解决问题。
内容的提问来源于stack exchange,提问作者David Async

