Nginx多域名HTTPS配置求助:80端口跳转443配置咨询
Nginx多域名HTTPS配置优化方案
嘿,针对你要实现Nginx支持多域名+HTTPS的需求,我来帮你完善并优化配置思路——先给你捋清楚更简洁高效的配置方式,再上完整代码:
首先,80端口的HTTP跳转不用写多个server块,一个统一的配置就能搞定所有域名的跳转,维护起来更省心:
server { listen 80; listen [::]:80; server_name example.com another.com; # 把所有需要跳转的域名列在这里 # 自动跳转到对应域名的HTTPS地址,用$host变量避免硬编码 return 301 https://$host$request_uri; }
接下来是443端口的HTTPS核心配置,分两种场景给你写:
场景1:多域名共用SAN证书(推荐)
如果你的Let's Encrypt证书是包含多个域名的SAN证书(可以用certbot生成),直接用一个server块就能覆盖所有域名:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com another.com; # 匹配所有需要的域名 # SSL证书路径(SAN证书包含所有域名,所以用同一个证书文件) ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 补全你没写完的安全头配置,强化站点安全性 add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # SSL优化配置,兼顾安全性和性能 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 这里添加你的站点根目录、路由规则等业务配置 root /var/www/example; index index.html index.htm; location / { try_files $uri $uri/ =404; } }
场景2:每个域名单独使用证书
如果每个域名有独立的Let's Encrypt证书,就分开写server块:
# 第一个域名配置 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 安全头和SSL优化同上 add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; # ...其他安全头配置 root /var/www/example; index index.html; } # 第二个域名配置 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name another.com; ssl_certificate /etc/letsencrypt/live/another.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/another.com/privkey.pem; # 安全头和SSL优化同上 add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; # ...其他安全头配置 root /var/www/another; index index.html; }
几个关键提醒:
- 用
$host变量代替硬编码域名,跳转时会自动匹配用户请求的域名,避免出错 - 如果要生成SAN证书,用certbot命令:
certbot certonly --webroot -w /var/www/example -d example.com -d another.com - 加上
Strict-Transport-Security头,能强制浏览器后续只用HTTPS访问,进一步提升安全性 - 配置完后一定要用
nginx -t检查语法,没问题再执行systemctl reload nginx生效
内容的提问来源于stack exchange,提问作者CYL
相关产品推荐
相关产品推荐

