Symfony搭配Varnish出现HTTP 404错误,求解决方案
解决方案
1. 强制Varnish加载自定义VCL文件
默认Varnish镜像启动时不会自动读取/etc/varnish/default.vcl,需在docker-compose.yml中添加启动命令指定配置文件路径:
varnish: image: varnish:7.3.0-alpine volumes: - "./default.vcl:/etc/varnish/default.vcl" extra_hosts: - "host.docker.internal:host-gateway" ports: - "8585:80" command: varnishd -F -f /etc/varnish/default.vcl -s malloc,256m
修改后重启Varnish容器:
docker-compose down && docker-compose up -d varnish
2. 清除浏览器缓存
浏览器大概率缓存了Varnish默认的「It works!」页面,按Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(Mac)强制刷新http://localhost:8585/,此时应和curl请求结果一致,显示Symfony首页。
3. 修复后台操作的404问题
3.1 清空Varnish缓存
若Varnish缓存了旧的404响应,进入容器执行命令清空全部缓存:
docker exec -it <你的Varnish容器名> varnishadm ban req.url ~ .
容器名可通过docker ps命令查看。
3.2 配置Symfony信任代理
让Symfony识别Varnish为可信代理,避免URL生成错误。编辑config/packages/framework.yaml:
framework: trusted_proxies: ['127.0.0.1', 'host.docker.internal'] trusted_hosts: ['localhost', '127.0.0.1']
3.3 核对API Platform Admin的API地址
检查config/packages/api_platform.yaml中的Admin配置,确保API入口指向Varnish地址:
api_platform: admin: entrypoint: 'http://localhost:8585'
若Admin是独立前端应用,检查其环境变量(如REACT_APP_API_URL)是否设置为http://localhost:8585。
4. 验证请求转发
用curl测试Varnish是否正确转发请求到Symfony:
curl -v http://localhost:8585/admin
若返回404,先确认直接访问http://localhost:8000/admin能正常打开——如果直接访问也报错,说明是Symfony路由本身的问题,和Varnish无关。
内容的提问来源于stack exchange,提问作者M. Mickael
相关产品推荐
相关产品推荐

