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

Nginx配置疑难:添加default_server致子域名异常,移除则报SSL证书错误

解决Nginx配置中default_server与子域名冲突及SSL证书报错问题

我来帮你拆解这个问题并给出针对性的解决方案:

问题根源分析

  1. 加default_server后子域名显示主站内容:
    当你把default_server加到www.fastenglishacademy.fr的443 server块时,所有没有匹配到对应server块的HTTPS请求(比如api.fastenglishacademy.fr)都会被这个默认服务器接管,自然就会显示主站的内容。

  2. 移除default_server后出现SSL证书报错:
    Nginx有个硬性要求:所有带有listen ... ssl指令的server块,必须配置ssl_certificate和ssl_certificate_key。你的第一个443 server块(处理fastenglishacademy.fr的HTTPS跳转)只做了301跳转,没有配置SSL证书;而当没有指定default_server时,Nginx会把第一个出现的443 server块当作默认服务器,检查到它缺少SSL配置就会直接报错。


解决方案:配置独立默认HTTPS服务器 + 子域名专属server块

我们可以通过两步彻底解决这个矛盾:

  1. 创建一个专门的默认HTTPS服务器,处理所有未匹配到具体域名的请求,同时给它配置SSL证书;
  2. 为api.fastenglishacademy.fr配置单独的server块,避免它被默认服务器或主站server块处理。

修改后的完整配置如下:

# 合并HTTP跳转规则,简化配置
server {
    listen 80;
    listen [::]:80;
    server_name fastenglishacademy.fr www.fastenglishacademy.fr;
    return 301 https://www.fastenglishacademy.fr$request_uri;
}

# 处理主域名HTTPS跳转(必须配置SSL证书)
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name fastenglishacademy.fr;
    
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    
    return 301 https://www.fastenglishacademy.fr$request_uri;
}

# 专门的默认HTTPS服务器,处理未匹配的请求
server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    
    # 对未匹配的域名,直接关闭连接(也可以返回自定义404页面)
    return 444;
}

# 主站核心server块
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    root /media/fea/www/fastenglishacademy.com;
    index index.html index.htm index.nginx-debian.html;
    server_name www.fastenglishacademy.fr;

    location / {
        etag on;
        try_files $uri$args $uri$args/ /index.html;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|ttf|woff2|woff|svg)$ {
        expires 365d;
    }

    location ~* \.(css|js)$ {
        expires 30d;
    }

    location ~* \.(pdf)$ {
        expires 15d;
    }

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    ssl_trusted_certificate /path/to/chain.pem;
}

# api子域名专属server块(根据实际需求配置)
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name api.fastenglishacademy.fr;
    
    # 示例:如果是反向代理到后端API服务
    # location / {
    #     proxy_pass http://localhost:3000;
    #     proxy_set_header Host $host;
    #     proxy_set_header X-Real-IP $remote_addr;
    # }
    
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    ssl_trusted_certificate /path/to/chain.pem;
}

关键细节说明

  • 给跳转的443块加证书:哪怕只是做跳转,只要listen指令带ssl,就必须配置SSL证书,否则Nginx无法完成SSL握手流程。
  • 独立默认服务器:把default_server放到专门的块里,主站和子域名的请求会优先匹配各自的server块,只有完全未匹配的请求才会被默认服务器处理。
  • 子域名专属块:为api.fastenglishacademy.fr单独配置server块,确保它的请求不会被主站或默认服务器接管。

配置完成后,执行nginx -t测试配置合法性,没问题的话重启Nginx即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:54