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
相关产品推荐
相关产品推荐

