SSL 证书与 HTTPS 配置
约 540 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Nginx › HTTPS 与 TLS(在新窗口打开) › SSL 证书与 HTTPS 配置
获取 SSL 证书
Let's Encrypt(推荐,免费)
# 安装 certbot
# Ubuntu
sudo apt install certbot python3-certbot-nginx
# macOS
brew install certbot
# 获取证书(会自动修改 Nginx 配置)
sudo certbot --nginx -d example.com -d www.example.com
# 仅获取证书,手动配置
sudo certbot certonly --nginx -d example.com
# 检查证书
sudo certbot certificates
# 测试自动续期
sudo certbot renew --dry-run自签名证书(开发环境)
# 生成私钥和自签名证书
sudo mkdir -p /etc/ssl/private
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt \
-subj "/CN=localhost"HTTPS 配置
server {
listen 443 ssl;
server_name example.com;
# 证书路径
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
# 协议与密码套件
ssl_protocols TLSv1.2 TLSv1.3; # 禁用 TLSv1.0/1.1
ssl_ciphers HIGH:!aNULL:!MD5; # 安全密码套件
# 其他配置
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
}HTTP 强制跳转到 HTTPS
server {
listen 80;
server_name example.com www.example.com;
# 301 永久重定向到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
# ... 正常配置
}完整安全配置
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
# 协议与密码
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;
ssl_prefer_server_ciphers on;
# DH 参数(提升 DHE 密码套件安全性)
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# 会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# 安全头
add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP → HTTPS 重定向
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}配置检查
# 生成 DH 参数(一次性)
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
# 测试配置
sudo nginx -t
# 检查 SSL 配置
# 使用在线工具:https://www.ssllabs.com/ssltest/
# 或本地工具
sudo apt install testssl.sh
testssl.sh https://example.com小结
- Let's Encrypt + certbot 是获取免费 SSL 证书的标准方式。
- 自签名证书适合开发环境,生产必须用可信 CA。
- HTTPS 配置:
listen 443 ssl+ssl_certificate+ssl_certificate_key。 - HTTP 80 端口用
return 301 https://$host$request_uri强制跳转 HTTPS。 - SSL 安全优化:禁用旧协议、安全密码套件、OCSP Stapling、HSTS。
上一节:WebSocket 代理 下一节:HTTP/2 与 HSTS
