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

多租户Laravel应用AWS负载均衡器健康检查路径配置问题

解决方案

针对AWS ALB健康检查被Nginx 000-catch-all 拦截返回444的问题,提供以下3种规范可行的解决方式:

方案1:创建优先级更高的专属健康检查Server块

利用Nginx按配置文件名顺序加载的特性,创建一个比000-catch-all优先级更高的配置文件,专门处理ALB健康检查请求:

  1. 在Laravel Forge的sites-available目录下创建000-health-check.conf,写入以下配置:
server {
    listen 80 default_server;
    listen 443 ssl default_server;

    # 匹配AWS ALB健康检查的专属User-Agent
    if ($http_user_agent = "ELB-HealthChecker/2.0") {
        location /health {
            return 200 'OK';
            add_header Content-Type text/plain;
        }
    }

    # 非健康检查请求仍走原有逻辑
    location / {
        return 444;
    }
}
  1. 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/000-health-check.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
  1. 在AWS目标组中设置健康检查路径为/health,无需额外修改Host头。

优点:完全独立的健康检查逻辑,不影响现有应用和catch-all配置,最规范。

方案2:在现有应用Server块中添加健康检查路由

修改指定Laravel应用的Nginx配置,确保健康检查请求能匹配到对应应用的Server块:

  1. 打开目标应用的Nginx配置文件(如sites-available/app1.com),在Server块顶部添加健康检查location:
server {
    listen 80;
    listen 443 ssl http2;
    server_name app1.com *.app1.com;

    # 优先处理健康检查请求
    location /health {
        return 200 'OK';
        add_header Content-Type text/plain;
        # 若需要通过Laravel路由返回,可替换为:
        # try_files $uri $uri/ /index.php?$query_string;
    }

    # 原有应用配置(保留不动)
    root /home/forge/app1.com/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP相关配置...
}
  1. 在AWS目标组中配置健康检查:
  • 路径设为/health
  • Host头设为demo.app1.com(或app1.com,需匹配应用的server_name)

优点:复用现有应用配置,无需新增独立文件,适合不想改动太多配置的场景。

方案3:优化现有000-catch-all配置

仅对ALB健康检查请求放行,其他未知域名仍返回444,比直接修改catch-all返回200更严谨:

修改sites-available/000-catch-all的内容为:

server {
    listen 80 default_server;
    listen 443 ssl default_server;

    # 仅响应ALB健康检查请求
    if ($http_user_agent = "ELB-HealthChecker/2.0") {
        location /health {
            return 200 'OK';
            add_header Content-Type text/plain;
        }
    }

    # 其他所有未知请求返回444
    location / {
        return 444;
    }
}

修改后执行sudo nginx -t && sudo systemctl reload nginx,同时将AWS目标组健康检查路径设为/health。

优点:改动最小,仅需修改现有catch-all文件,不影响其他配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:07:30