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

Laravel 8通过curl访问返回404,AWS健康检查失败问题求助

问题排查与修复方案

你遇到的是典型的请求Host头与路由匹配规则不兼容问题,结合你给出的现象:浏览器带域名访问正常、curl本地IP返回Laravel自定义404、fallback路由未生效,可按以下优先级排查:

核心原因(出现概率90%+)

你的web路由全部被包裹在带domain限制的路由组中,示例如下:

// 你可能在web.php/RouteServiceProvider中有类似配置
Route::domain('你的正式站点域名.com')->group(function () {
    // 你写的/health、/home、fallback等全部路由都在这个组内
});

当你用curl 127.0.0.1/health访问时,请求的Host头是127.0.0.1,不满足路由组的domain限制,Laravel不会加载该组内的任何路由,自然也触发不到你写的fallback路由,直接返回全局默认404页面。

验证方法

执行带Host头的curl请求测试:

curl -H "Host: 你的正式站点域名.com" http://127.0.0.1/health

如果该请求返回正常的status:ok;,即可确认是该问题。

修复方案

根据你的使用场景选其中一种即可:

  • 方案1:调整路由组规则,允许本地IP访问
    给路由组新增127.0.0.1的域名匹配规则:
    Route::domain(env('APP_DOMAIN'))->orDomain('127.0.0.1')->group(function () {
        // 原有路由保持不变
    });
    
  • 方案2:给AWS健康检查配置自定义Host头
    在AWS ALB/ECS的健康检查配置中,新增请求头Host,值填写你的正式站点域名,无需修改代码。
  • 方案3:将健康检查路由移到全局作用域
    把/health路由写到所有带domain限制的路由组之外,或者写到routes/api.php中(访问路径变为/api/health,同步修改健康检查路径即可)。

其他可能原因

路由缓存未更新

如果部署时开启了路由缓存,新增/health路由后未重新生成缓存也会出现该问题,执行以下命令修复:

php artisan route:clear
php artisan route:cache

注意:部署流水线中需要将路由缓存的执行步骤放在代码更新之后。

Web服务器虚拟主机配置错误

如果你的Nginx/Apache配置了多个虚拟主机,127.0.0.1的请求默认匹配到了其他站点而非你的Laravel应用,可将你的Laravel站点虚拟主机设为默认服务,或修改健康检查端口为站点专属端口即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:06:03