You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx+PHP架构下预取请求返回503错误的处理咨询

Nginx+PHP架构下预取请求返回503错误的处理咨询

我这边有个用Nginx部署的PHP应用/网站,最近用Chrome开着开发者工具的网络面板逛网站时发现个问题:每次跳转到新页面之前,都会先发一个**prefetch(预取)**请求,但服务器给这个请求返回的是503(服务不可用)状态码。目前网站是通过CloudFlare做反向代理的,我挺担心这些503错误会不会影响网站的正常运行或者搜索引擎收录,想请教下是不是得调整Nginx配置来正确处理这类预取请求?

截图说明:

  1. 第一张截图显示了两次请求,其中一次明确标记为预取请求
  2. 第二张截图展示了预取请求对应的响应头信息

先分析可能的原因

出现这种情况,大概率是下面几个环节出了问题:

  • CloudFlare的拦截或缓存策略:CloudFlare可能把预取请求识别成了异常流量,或者缓存规则没适配Purpose: prefetch这个请求头,直接返回了503。
  • Nginx配置未兼容预取请求:你的Nginx配置可能对某些请求头或请求类型做了限制,导致预取请求没被正常转发到PHP-FPM。
  • PHP应用的逻辑限制:PHP代码里可能有针对请求头的判断,不小心拒绝了带有Purpose: prefetch的请求。

具体的处理步骤

1. 调整Nginx配置,适配预取请求

你可以在Nginx的server配置块里添加专门针对预取请求的处理规则,确保它能正常传递给PHP:

# 识别预取请求并做针对性处理
if ($http_purpose = "prefetch") {
    # 标记已处理预取请求(可选,方便调试)
    add_header X-Prefetch-Handled "Success";
    # 确保请求转发到PHP-FPM,这里换成你实际的PHP-FPM地址
    fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

或者更通用的,在主location块里允许预取请求的相关头:

location / {
    try_files $uri $uri/ /index.php?$query_string;
    # 允许预取请求携带的Purpose头
    add_header Access-Control-Allow-Headers "Purpose";
}

2. 检查CloudFlare的相关设置

  • 登录CloudFlare后台,先看安全→WAF规则,有没有拦截带有Purpose: prefetch的请求,如果有,直接调整规则放行就行。
  • 再去缓存→缓存规则里,给预取请求设置合适的缓存策略,比如允许缓存或者直接回源(根据你的网站需求来)。
  • 也可以检查下网络模块里的HTTP/2、HTTP/3设置,确保预取请求的协议支持没问题。

3. 排查PHP应用的处理逻辑

打开你的PHP入口文件(比如index.php),添加日志记录预取请求的细节,看看是不是代码里有返回503的逻辑:

if (isset($_SERVER['HTTP_PURPOSE']) && $_SERVER['HTTP_PURPOSE'] === 'prefetch') {
    // 记录预取请求到日志,方便排查
    error_log('Prefetch Request: ' . $_SERVER['REQUEST_URI'] . ' | IP: ' . $_SERVER['REMOTE_ADDR']);
    // 确保这里没有主动返回503的代码
}

额外小技巧

你可以先绕过CloudFlare,直接在服务器本地或者用hosts指向服务器IP测试预取请求,如果还是返回503,那问题就出在Nginx或PHP上;如果正常了,那就是CloudFlare的配置问题,这样能快速定位根源。另外,记得查看Nginx的错误日志(比如/var/log/nginx/error.log),里面大概率会有预取请求报错的具体信息,帮你更快找到问题。

备注:内容来源于stack exchange,提问作者Ade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:38:12