如何在 Nginx 中配置 SSL/TLS 证书以实现完整的 HTTPS 访问?
在 Nginx 中配置 SSL/TLS 证书以实现完整的 HTTPS 访问,通常需要完成以下几个核心步骤:准备证书、配置 Nginx 监听 443 端口、强制 HTTP 重定向到 HTTPS,以及优化安全配置。
以下是详细的操作指南:
第一步:准备 SSL/TLS 证书
你需要两个主要文件:
- 证书文件(通常以
.crt或.pem结尾,包含公钥和证书链)。 - 私钥文件(通常以
.key结尾)。
如果你还没有证书,推荐使用 Let's Encrypt (Certbot) 免费申请(见文末简易自动化方法)。如果有购买的商业证书,请将它们上传到服务器(建议放在 /etc/nginx/ssl/ 目录下)。
第二步:配置 Nginx (完整示例)
打开你的 Nginx 站点配置文件(通常位于 /etc/nginx/conf.d/你的域名.conf 或 /etc/nginx/sites-available/你的域名)。
将配置修改为以下结构:
plaintext
# 1. 强制 HTTP 重定向到 HTTPS (监听 80 端口)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com; # 替换为你的域名
# 将所有 HTTP 请求 301 永久重定向到 HTTPS
return 301 https://$host$request_uri;
}
# 2. HTTPS 服务器配置 (监听 443 端口)
server {
listen 443 ssl http2; # 开启 SSL 和 HTTP/2 (提升性能)
server_name yourdomain.com www.yourdomain.com; # 替换为你的域名
# 网站根目录和首页文件
root /var/www/html;
index index.html index.php;
# ================= 核心 SSL 配置 =================
# 证书文件路径
ssl_certificate /etc/nginx/ssl/yourdomain.pem;
# 私钥文件路径
ssl_certificate_key /etc/nginx/ssl/yourdomain.key;
# ================= 安全优化配置 (推荐) =================
# 仅启用安全的 TLS 版本 (禁用不安全的 SSLv3, TLS 1.0, 1.1)
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 on; # 优先使用服务器的加密套件
# 开启 SSL 会话缓存 (提升 HTTPS 连接性能)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# 开启 HSTS (HTTP Strict Transport Security) - 强制浏览器使用 HTTPS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# ================= 正常的路由配置 =================
location / {
try_files $uri $uri/ =404;
}
}
第三步:检查并重启 Nginx
在修改配置文件后,务必先测试语法,防止配置错误导致服务器宕机。
测试 Nginx 配置:
bashsudo nginx -t如果显示
syntax is ok和test is successful,则继续。重载 Nginx 应用配置:
bashsudo systemctl reload nginx # 或者使用 sudo nginx -s reload
💡 附:最简单的自动化方案(使用 Certbot)
如果你还没有证书,强烈建议使用 Let's Encrypt 的官方工具 Certbot。它可以自动申请证书、自动修改 Nginx 配置文件、自动实现 HTTP 重定向、并自动配置安全最佳实践。
操作步骤(以 Ubuntu/Debian 为例):
- 确保你的 Nginx 已经配置好了 80 端口,且
server_name写对了你的域名,域名也已经正确解析到该服务器 IP。 - 安装 Certbot:bash
sudo apt update sudo apt install certbot python3-certbot-nginx - 运行 Certbot:bash
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com - 根据终端提示操作,当询问是否重定向 HTTP 到 HTTPS 时,选择 Redirect(重定向)。
- 完成!Certbot 会自动帮你配置好证书,并且配置自动续期(证书有效期 90 天,Certbot 会在后台自动更新)。
常见问题排查
- 无法访问 HTTPS? 检查服务器防火墙(如
ufw,iptables)或云服务商的安全组(阿里云/腾讯云/AWS),确保 443 端口已对外开放。 - 浏览器提示“不安全”? 确保证书没有过期,且域名与证书绑定的域名完全一致;确保证书链完整(提供了
.pem格式的包含中间证书的文件)。 - 页面加载不完整(混合内容错误)? 如果你的网页代码中写死了
http://...加载图片、JS 或 CSS 文件,浏览器会拦截这些资源。请将代码中的资源链接改为相对路径(如/img/logo.png)或https://...。