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

FrankenPHP部署Symfony应用时持续自动发送/请求致404循环问题

Symfony + FrankenPHP 容器自动循环请求 / 返回404的排查与解决

可能的原因及解决方法

1. Caddyfile 健康检查/探针配置错误

FrankenPHP镜像默认可能自带对根路径/的健康探测,若你的Symfony应用未配置/路由,就会持续返回404,同时探针反复发起请求,形成循环日志。

解决方式:

  • 自定义健康检查路径,指向Symfony存在的端点,或临时给根路径返回200避免404:
    :80
    root * /app/public
    frankenphp
    php_fastcgi unix//run/frankenphp/php-fpm.sock
    
    # 配置自定义健康检查路径
    health_check /_health {
        interval 15s
        path /_health
    }
    
    # 临时处理根路径请求
    @rootPath {
        path /
    }
    respond @rootPath 200 "Service Running"
    

2. Docker Compose 健康检查配置不当

如果docker-compose.yml中配置了针对/的健康检查,而Symfony未处理该路径,Docker会持续发送请求,导致日志中出现循环404。

解决方式:
修改docker-compose的健康检查配置,指向存在的路径:

services:
  app:
    image: your-frankenphp-image
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/_health"]
      interval: 30s
      timeout: 10s
      retries: 3

同时在Symfony中新增对应的健康路由:

// src/Controller/HealthController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class HealthController
{
    #[Route('/_health', name: 'health_check')]
    public function check(): Response
    {
        return new Response('OK', Response::HTTP_OK);
    }
}

3. Symfony Runtime 配置异常

确认runtime/frankenphp-symfony扩展的配置是否正确,避免启动时触发自动请求逻辑。

检查以下文件:

  • public/index.php:确保runtime初始化逻辑正确,无额外请求代码
    <?php
    use App\Kernel;
    require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
    
    return function (array $context) {
        return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
    };
    
  • composer.json:确认runtime配置指向正确
    "config": {
        "runtime": "runtime/frankenphp-symfony/src/Runtime.php"
    }
    

4. Symfony 路由未配置根路径

若Symfony应用没有为/路径定义任何路由,任何对/的请求都会返回404。若有服务(如健康检查)持续请求该路径,就会产生循环日志。

解决方式:
添加根路径路由,或调整所有自动请求的目标路径到已存在的路由。例如:

// src/Controller/HomeController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class HomeController
{
    #[Route('/', name: 'home')]
    public function index(): Response
    {
        return new Response('Symfony + FrankenPHP is running!');
    }
}

内容的提问来源于stack exchange,提问作者Bogdan Dubyk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:54:55