在配置网站以实现 HTTPS 重定向时,有一个关键点需要特别注意:即使您的域名仅仅用于将用户的 HTTP 请求自动跳转到 HTTPS 地址,仍然必须为该域名配置有效的 SSL 证书。
1. 为什么在 HTTPS 重定向时需要 SSL 证书? #
当用户的浏览器尝试访问您的 HTTP 网站时,服务器会发送一个重定向指令,告诉浏览器应该访问 HTTPS 版本的网站。在浏览器真正跳转到 HTTPS 地址之前,它会首先尝试验证原始 HTTP 域名(即将被重定向的域名)的 SSL 证书。
这个验证过程是 HTTPS 安全机制的一部分。浏览器需要确认服务器提供的证书是可信的,并且与正在访问的域名相匹配。如果原始域名没有配置有效的 SSL 证书,或者证书存在问题(例如过期、不被信任等),浏览器可能会发出安全警告,甚至阻止用户访问,从而导致重定向失败。
1.1 关键点 #
- 进行 HTTPS 重定向时,浏览器在跳转前会验证原域名的 SSL 证书。
- 即使域名仅用于跳转,也必须为其配置有效的 SSL 证书。
- 缺少或无效的 SSL 证书可能导致重定向失败和安全警告。
2. HTTPS 重定向配置示例(Nginx) #
以下是在 Nginx 服务器中配置 HTTPS 重定向(https://xinlake.dev
跳转到 https://xsymm.com
)的示例。请注意,即使是监听 80 端口(HTTP)的 server 块,也需要确保相关的域名拥有有效的 SSL 证书。
Nginx
server {
listen 80;
listen [::]:80;
server_name xinlake.dev www.xinlake.dev;
# 将所有 HTTP 请求 301 重定向到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name xinlake.dev www.xinlake.dev;
# 配置 xinlake.dev 和 www.xinlake.dev 的 SSL 证书
ssl_certificate /etc/letsencrypt/live/xinlake.dev/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xinlake.dev/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/xinlake.dev/chain.pem;
# 配置 SSL 协议和密码套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
ssl_prefer_server_ciphers on;
# ssl_dhparam /etc/ssl/certs/dhparam.pem; # 可选配置
# 配置 SSL 会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# 启用 OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
# 强制将已是 HTTPS 的 xinlake.dev 和 www.xinlake.dev 重定向到 xsymm.com
return 301 https://xsymm.com;
}
在上述配置中
xinlake.dev
和www.xinlake.dev
这两个域名在监听 80 端口的 server 块中进行了 HTTPS 重定向。- 您需要为这两个域名(
xinlake.dev
和www.xinlake.dev
)都申请并配置有效的 SSL 证书,即使它们的唯一功能是跳转到https://xsymm.com
。
有用的链接:
- Mozilla:301 Moved Permanently
- Letsencrypt(免费 SSL 证书)