需求
- 监听 443 端口(SSL)或者其他端口;
- 作为“默认”服务器(即所有未匹配到其他
server_name的请求都会落到它); - 把这类请求 301 重定向到指定网页(例如
https://example.com/404.html)。
配置
NGINX
假设你已经把证书文件(fullchain.pem 与 privkey.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;
}使用说明
- 把以上内容保存为
/etc/nginx/conf.d/default.conf(或任意被include的路径)。 检查配置语法:
sudo nginx -t重载生效:
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 apache2CentOS/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 到指定网页。