谷粒的泥坑

🌿谷粒的生活笔记 —— 在数字世界的泥坑中,播种代码、文字的种子,静待每一份热爱自然生长

Nginx配置SSL并实现默认HTTPS访问

Nginx 配置 SSL 并实现默认 HTTPS 访问

要在 Nginx 上配置 SSL 并强制所有流量通过 HTTPS 访问,请按照以下步骤操作:

  1. 获取 SSL 证书

首先,你需要获取有效的 SSL 证书。你可以从以下途径获取:
• 从 Let’s Encrypt 获取免费证书(推荐)

• 从商业 CA 购买证书

• 自签名证书(仅用于测试)

使用 Let’s Encrypt 获取证书(推荐)

1
2
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
  1. 配置 Nginx SSL

编辑你的 Nginx 站点配置文件(通常在 /etc/nginx/sites-available/yourdomain.com):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;

ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

# 启用 SSL 会话缓存以提高性能
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

# 使用安全的 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 on;

# 启用 HSTS (HTTP Strict Transport Security)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# 其他配置...
root /var/www/yourdomain.com/html;
index index.html index.htm;

location / {
try_files $uri $uri/ =404;
}
}
  1. 强制 HTTPS 重定向

添加或修改 HTTP (80 端口) 的服务器块,将所有 HTTP 请求重定向到 HTTPS:

1
2
3
4
5
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
  1. 测试并重新加载配置

测试 Nginx 配置是否正确:

1
sudo nginx -t

如果没有错误,重新加载 Nginx:

1
sudo systemctl reload nginx
  1. 自动续订证书(仅适用于 Let’s Encrypt)

设置自动续订:

1
sudo certbot renew --dry-run

可以添加到 crontab 自动续订:

1
sudo crontab -e

添加以下行:

1
0 12 * * * /usr/bin/certbot renew --quiet

验证配置

访问你的网站,确保:

  1. 输入 http://yourdomain.com 会自动跳转到 https://yourdomain.com
  2. 浏览器地址栏显示安全锁标志
  3. 可以使用 SSL Labs 测试工具 检查 SSL 配置安全性

注意事项

  1. 确保防火墙允许 443 端口(HTTPS)的入站连接
  2. 定期检查证书是否自动续订成功
  3. 如果使用自签名证书,浏览器会显示安全警告,不适合生产环境
  4. 对于多域名配置,确保每个域名都有正确的 SSL 证书

通过以上配置,你的网站将默认使用 HTTPS,并提供安全的加密连接。