乐闻世界logo
搜索文章和话题

Nginx 如何配置 HTTPS 和 SSL 证书?

2月21日 16:57

Nginx 如何配置 HTTPS 和 SSL 证书?

Nginx 配置 HTTPS 需要使用 SSL 模块,通过配置 SSL 证书来启用加密通信。HTTPS 可以保护数据传输的安全性,防止数据被窃听或篡改。

基本配置示例:

nginx
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; location / { root /var/www/html; index index.html; } }

SSL 证书配置参数:

nginx
server { listen 443 ssl http2; server_name example.com; # 证书文件路径 ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # SSL 协议版本 ssl_protocols TLSv1.2 TLSv1.3; # 加密套件 ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # SSL 会话缓存 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/ssl/chain.crt; # HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; }

HTTP 自动跳转 HTTPS:

nginx
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; location / { root /var/www/html; } }

SSL 证书类型:

  1. 自签名证书:用于测试环境,不被浏览器信任
  2. 免费证书:如 Let's Encrypt,有效期 90 天,可自动续期
  3. 商业证书:由 CA 机构颁发,有效期通常为 1 年

Let's Encrypt 证书申请:

使用 Certbot 工具申请免费证书:

bash
# 安装 Certbot sudo apt-get install certbot python3-certbot-nginx # 申请证书并自动配置 Nginx sudo certbot --nginx -d example.com -d www.example.com # 只申请证书,不自动配置 sudo certbot certonly --nginx -d example.com

证书续期:

bash
# 手动续期 sudo certbot renew # 自动续期(添加到 crontab) 0 0,12 * * * certbot renew --quiet

安全配置建议:

  1. 使用 TLS 1.2 或更高版本
  2. 禁用弱加密套件
  3. 启用 HSTS 防止降级攻击
  4. 配置 OCSP Stapling 提高性能
  5. 定期更新证书
  6. 使用强密钥(至少 2048 位)
  7. 启用 HTTP/2 提升性能

性能优化:

nginx
# SSL 会话缓存 ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # 启用 HTTP/2 listen 443 ssl http2; # SSL 缓冲区大小 ssl_buffer_size 4k;

多域名证书配置:

nginx
server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/wildcard.crt; ssl_certificate_key /etc/nginx/ssl/wildcard.key; location / { root /var/www/html; } }

证书链配置:

如果证书需要中间证书,需要将证书和中间证书合并:

bash
cat example.com.crt intermediate.crt > bundle.crt

然后在 Nginx 配置中使用 bundle.crt:

nginx
ssl_certificate /etc/nginx/ssl/bundle.crt;
标签:Nginx