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

Laravel Forge负载均衡器默认兜底站点失效问题求助

解决Laravel Forge兜底站点失效问题

问题核心

恢复站点SSL证书后,未配置的域名请求不再被000-catch-all兜底站点处理,而是跳转到站点列表的第一个站点,原因主要有两点:

  • Nginx会将未匹配server_name的请求交给第一个加载的server块处理,若兜底配置加载顺序靠后则失效
  • 兜底配置仅处理HTTP(80端口)请求,未覆盖HTTPS(443端口),导致HTTPS的未匹配请求被第一个HTTPS站点接管

解决方案

1. 确保兜底配置优先加载

Nginx按配置文件名排序加载站点配置,000-catch-all的前缀保证它会被优先加载,但需确认:

  • 执行 ls -l /etc/nginx/sites-enabled/,确认000-catch-all排在所有站点配置的最前面
  • 若顺序不对,调整文件名前缀(比如用000-开头,确保比其他站点的数字前缀更小)

2. 更新兜底配置,覆盖HTTP和HTTPS请求

修改000-catch-all配置,添加HTTPS监听并设置为default_server,同时配置有效SSL证书(可使用Let's Encrypt泛域名证书,或Forge生成的默认证书):

# HTTP 请求处理:可重定向到HTTPS兜底,或直接返回页面
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;

    # 可选:将HTTP请求重定向到HTTPS兜底
    return 301 https://$host$request_uri;

    # 若无需跳转,直接返回兜底页面
    # root /home/forge/catch-all;
    # index index.html index.htm;
    # location / {}
}

# HTTPS 请求兜底处理
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;

    # 替换为你的有效SSL证书路径
    ssl_certificate /etc/nginx/ssl/catch-all.example.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/catch-all.example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    root /home/forge/catch-all;
    index index.html index.htm;

    error_page 404 /404.html;

    location / {}
}

3. 移除其他站点的default_server配置

检查所有站点的Nginx配置,确保它们的listen指令没有添加default_server参数(比如你提供的站点配置中listen 80;是正确的,没有加default_server),避免覆盖兜底配置的默认规则。

4. 验证配置并重启Nginx

  • 执行 sudo nginx -t 检查配置语法是否合法
  • 执行 sudo systemctl reload nginx 重启Nginx生效配置

5. 负载均衡额外检查(若使用)

如果负载均衡做了SSL终止,确保它将未匹配域名的请求转发到后端的兜底站点,而非直接转发到第一个站点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:11:09