Debian 上 Nginx 配置 HTTPS 的标准步骤
按以下顺序执行,可在 Debian 上完成 Nginx 的 HTTPS 启用与优化,涵盖域名解析、证书获取、Nginx 配置、防火墙放行、验证与自动续期。
一 准备与前置条件
sudo apt update && sudo apt install nginx -ysudo systemctl start nginx && sudo systemctl enable nginxsudo ufw allow 'Nginx Full'(或分别放行 80/tcp 与 443/tcp)二 获取并安装 SSL 证书
sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d example.com -d www.example.com三 配置 Nginx 站点与强制 HTTPS
sudo nano /etc/nginx/sites-available/example.comserver {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
# 可选:启用 HSTS(谨慎开启,确认长期可用 HTTPS 后再启用)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginx四 验证与自动续期
curl -I https://example.com(应返回 HTTP/2 200 等正常头)openssl s_client -connect example.com:443 -servername example.comsudo certbot renew --dry-run(无报错表示续期正常)五 常见问题与优化建议
sudo nginx -tsudo tail -f /var/log/nginx/error.loglisten 443 ssl http2;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;(Certbot 常用路径)sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crtssl_certificate 与 ssl_certificate_key 指向上述文件,再 sudo nginx -t && sudo systemctl reload nginx