需求

  1. 监听 443 端口(SSL)或者其他端口;
  2. 作为“默认”服务器(即所有未匹配到其他 server_name 的请求都会落到它);
  3. 把这类请求 301 重定向到指定网页(例如 https://example.com/404.html)。

配置

NGINX

假设你已经把证书文件(fullchain.pemprivkey.pem)放在 /etc/nginx/ssl/ 目录下,按需改成自己的真实路径即可。

# /etc/nginx/conf.d/default.conf   (或放在 sites-enabled 里)
server {
    listen 443 ssl default_server;          # 1. 监听 443 并设为默认
    server_name _;                          # 2. 强制兜底,可省略或写 _

    # SSL 证书路径
    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # 可选:强化 SSL 安全
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 3. 未匹配时统一跳转
    return 301 https://example.com/404.html;
}

使用说明

  1. 把以上内容保存为 /etc/nginx/conf.d/default.conf(或任意被 include 的路径)。
  2. 检查配置语法:

    sudo nginx -t
  3. 重载生效:

    sudo systemctl reload nginx

当用户任何使用 HTTPS 访问服务器 IP 或未知域名时,都会 301 到 https://example.com/404.html

Apache2

假设:

  • 已开启 mod_ssl 并准备好了证书/私钥:/etc/ssl/certs/fullchain.pem`/etc/ssl/private/privkey.pem`
  • 已开启 mod_rewrite(用于干净地写重定向规则,可选)。

步骤 1:在任意被 Include 的目录里新建兜底配置文件
(Debian/Ubuntu 习惯放在 /etc/apache2/sites-available/000-default-ssl.conf,CentOS/RHEL 可放在 /etc/httpd/conf.d/00-default-ssl.conf

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        # 1. 必须是第一个被加载的 SSL 虚拟主机,才能成为“默认”
        ServerName default.invalid
        DocumentRoot /var/www/html     # 随便指一个空目录即可,后面会重定向

        # SSL 证书
        SSLEngine on
        SSLCertificateFile      /etc/ssl/certs/fullchain.pem
        SSLCertificateKeyFile   /etc/ssl/private/privkey.pem

        # 可选:强化 TLS
        SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
        SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:...
        SSLHonorCipherOrder     off

        # 2. 兜底重定向:所有流量 301 到指定地址
        Redirect 301 / https://example.com/404.html

        # 3. 关闭目录索引,防止泄露
        Options -Indexes
    </VirtualHost>
</IfModule>

步骤 2:启用并生效
Debian/Ubuntu 系:

# 启用 SSL 模块(一次性)
sudo a2enmod ssl
sudo a2ensite 000-default-ssl.conf   # 如果文件名不同请替换
sudo systemctl reload apache2

CentOS/RHEL 系:

# 模块默认已编译,直接重载
sudo systemctl reload httpd

验证

curl -kI https://YOUR_IP_or_Undefined_Domain/
HTTP/1.1 301 Moved Permanently
Location: https://example.com/404.html

至此,Apache 2 的“默认 443 虚拟主机”已配置完成:

  • 任何未匹配到现有 ServerName/ServerAlias 的 HTTPS 请求都会被 301 到指定网页。
最后修改:2025 年 11 月 12 日
如果觉得我的文章对你有用,请随意赞赏