WordPress脚本超时引发500内部服务器错误:仅Safari可正常访问
这个问题确实有点棘手——你已经把WordPress排查的常规操作(禁用插件/主题、恢复核心、数据库、检查.htaccess)都试过了,那咱们就得从浏览器请求差异和服务器超时触发逻辑这两个方向入手,毕竟只有Safari能正常访问这个点是核心线索。
下面是针对性的排查和解决步骤:
检查服务器超时配置,扩大执行时间上限
日志里的Script timed out before returning headers: index.php是核心提示,虽然常规操作没解决,但可能Chrome/Firefox的请求会触发更复杂的代码路径,导致超时阈值不够。你需要调整这些配置:- PHP层面:编辑
php.ini,提高max_execution_time(比如从30改成60)、max_input_time和memory_limit的值;如果用PHP-FPM,还要检查php-fpm.conf里的request_terminate_timeout参数。 - Web服务器层面:如果是Apache,修改
httpd.conf里的Timeout指令(比如设为60);如果是Nginx,调整fastcgi_read_timeout(建议设为60s以上)。修改后重启服务器生效。
- PHP层面:编辑
模拟不同浏览器请求头,定位差异
Safari和其他浏览器发送的请求头(比如User-Agent、Accept-Encoding、Connection)可能存在差异,导致服务器处理逻辑不同。你可以用curl命令模拟两种浏览器的请求:# 模拟Chrome请求 curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" -I http://你的网站域名 # 模拟Safari请求 curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" -I http://你的网站域名对比返回的状态码和响应头,看Chrome请求卡在哪个环节,是否有额外的重定向或错误提示。
清空服务器/CDN端的缓存,排除缓存污染
有时候服务器的OPcache、APC缓存,或者CDN会针对不同浏览器缓存错误状态页。你可以:- 重启PHP服务清空OPcache;
- 如果用了CDN,登录后台手动清空全部缓存;
- 测试时用Chrome/Firefox的强制刷新(Ctrl+Shift+R / Cmd+Shift+R)绕过浏览器本地缓存。
检查PHP-FPM进程配置,避免资源耗尽
如果你的服务器用PHP-FPM,可能存在进程数不足或闲置超时的问题:- 编辑
php-fpm.conf,调整pm.max_children(根据服务器内存设置,比如1核2G服务器设为20)、pm.start_servers和pm.min_spare_servers; - 检查
pm.process_idle_timeout,避免进程过早被回收导致请求中断。
- 编辑
排查隐藏的自定义代码/ mu-plugins
有时候wp-content/mu-plugins目录下的必须插件(可能是主机商预装或你之前添加的)会有浏览器相关的逻辑,导致Chrome/Firefox请求超时。可以暂时重命名mu-plugins目录,测试是否恢复正常;另外也要检查主题目录下的functions.php,看是否有针对非Safari浏览器的特殊处理代码。
内容的提问来源于stack exchange,提问作者Chuy

