一、引言:HTTPS------现代网站的"标配"与"刚需"
还在用 HTTP 裸奔?你的网站可能正面临以下风险:
- 数据被窃听:用户密码、支付信息在传输中明文可见。
- 中间人攻击:黑客可以篡改你的网页内容,植入恶意代码。
- 浏览器警告:Chrome、Firefox 等主流浏览器会将 HTTP 网站标记为"不安全",严重影响用户体验和信任度。
- SEO劣势:Google 等搜索引擎明确表示优先收录 HTTPS 网站。
好消息是,免费的 SSL/TLS 证书(如 Let's Encrypt)让 HTTPS 的普及变得前所未有的简单。本文将带你从申请证书到 Nginx 配置,再到安全加固,一站式搞定 HTTPS!
💡 核心价值 :
掌握 Nginx HTTPS 配置,是保护用户数据、提升网站可信度和 SEO 排名的基石!
二、准备工作:获取你的 SSL 证书
选择证书类型
对于绝大多数个人博客、企业官网和小型应用,DV(域名验证)型免费证书完全够用。
推荐方案:
- Let's Encrypt:全球最流行的免费 CA,证书有效期 90 天,支持自动化续期。
- 云服务商免费证书:阿里云、腾讯云等也提供一年期的免费 DV 证书,申请流程更图形化。
使用 Certbot 自动化申请(以 Let's Encrypt 为例)
Certbot 是官方推荐的 ACME 协议客户端,能自动完成证书申请、验证和部署。
步骤 1:安装 Certbot
bash
# Ubuntu/Debian
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
# CentOS/RHEL (需先启用EPEL)
sudo yum install -y epel-release
sudo yum install -y certbot python3-certbot-nginx
步骤 2:运行 Certbot 获取并安装证书
bash
# Certbot 会自动修改你的 Nginx 配置
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
按照提示操作,Certbot 会:
- 验证你对域名的控制权(通过在网站根目录放置一个临时文件)。
- 从 Let's Encrypt 服务器获取证书。
- 自动修改你的 Nginx 配置文件,添加 HTTPS 相关设置。
- 设置一个
cron或systemd定时任务,用于自动续期(证书到期前 30 天)。
恭喜 !如果你看到
Congratulations!的提示,你的网站已经可以通过https://yourdomain.com访问了!
三、手动配置 Nginx(理解原理)
即使使用了 Certbot,理解背后的配置逻辑也至关重要。假设你已将证书文件上传到服务器:
- 证书文件 :
/etc/ssl/certs/yourdomain.com.pem(或.crt) - 私钥文件 :
/etc/ssl/private/yourdomain.com.key
基础 Nginx 配置
编辑你的站点配置文件(通常位于 /etc/nginx/sites-available/yourdomain 或 /etc/nginx/conf.d/yourdomain.conf):
# 强制 HTTP 跳转到 HTTPS (最佳实践)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
# HTTPS 服务配置
server {
listen 443 ssl http2; # 启用 HTTP/2
server_name yourdomain.com www.yourdomain.com;
# SSL 证书配置
ssl_certificate /etc/ssl/certs/yourdomain.com.pem;
ssl_certificate_key /etc/ssl/private/yourdomain.com.key;
# 根目录和索引文件
root /var/www/yourdomain;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
关键指令说明
listen 443 ssl http2;: 监听 443 端口,启用 SSL,并开启 HTTP/2 协议(性能更好)。ssl_certificate: 指向你的公钥证书文件(.pem或.crt)。ssl_certificate_key: 指向你的私钥文件(.key)。return 301 ...: 将所有 HTTP 请求永久重定向到 HTTPS,确保用户始终使用加密连接。
四、安全加固:让你的 HTTPS 更安全
基础配置只是开始。为了抵御更高级的攻击,我们需要进行安全加固。
1. 配置强加密套件
在 server 块中加入以下配置,禁用老旧、不安全的协议和加密算法。
# 禁用不安全的 SSL 协议
ssl_protocols TLSv1.2 TLSv1.3; # 只允许 TLS 1.2 和 1.3
# 配置加密套件 (Cipher Suites)
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 off;
2. 启用 HSTS(HTTP Strict Transport Security)
HSTS 是一个安全策略机制,它告诉浏览器在未来的请求中强制使用 HTTPS ,即使用户手动输入 http://。
# 在 server 块中添加
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
max-age: 浏览器记住此策略的时间(秒),这里设置为 2 年。includeSubDomains: 将策略应用到所有子域名。preload: 允许你的域名被加入浏览器的 HSTS 预加载列表(需额外申请)。
3. 配置 OCSP Stapling
OCSP Stapling 可以提升 TLS 握手速度,并增强隐私(避免浏览器直接向 CA 查询证书状态)。
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; # 使用 Google DNS
resolver_timeout 5s;
五、验证与测试
配置完成后,务必进行验证:
- 访问网站 :在浏览器中打开
https://yourdomain.com,检查地址栏是否出现安全锁标志。 - 在线检测工具 :
- SSL Labs' SSL Test:最权威的 HTTPS 配置检测工具,会给出详细的安全评级(目标是 A+)。
- Why No Padlock?:帮助排查混合内容(HTTP 资源嵌入 HTTPS 页面)等问题。
六、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!