一、Nginx 配置模板
以下是一个完整的 Nginx 配置示例,包含 SSL 证书配置、HSTS 策略和 OCSP Stapling 优化:
ini
nginx
server {
listen 443 ssl http2;
server_name www.yourdomain.com; # 替换为你的实际域名
# SSL 证书配置
ssl_certificate /path/to/yourdomain.com.pem; # 证书文件路径(含公钥)
ssl_certificate_key /path/to/yourdomain.com.key; # 私钥文件路径
ssl_trusted_certificate /path/to/yourdomain.com.chain.pem; # 证书链文件(如有)
# 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 策略
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# OCSP Stapling 配置
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; # 指定 DNS 解析服务器
resolver_timeout 5s;
# 其他常规配置
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name www.yourdomain.com;
return 301 https://$host$request_uri;
}
二、详细部署步骤
1. 获取 JoySSL 证书
-
注册 JoySSL 账号 :访问 [JoySSL 官网] 完成注册(注册时填写推荐码
230959可获取免费额度)。 -
选择证书类型:
- 单域名证书:适用于单个域名(如
www.yourdomain.com) - 通配符证书:适用于主域名及所有子域名(如
*.yourdomain.com)
- 单域名证书:适用于单个域名(如
-
完成域名验证:
- DNS 验证:在域名 DNS 解析中添加一条 TXT 记录
- 文件验证:下载验证文件并上传至网站根目录
-
下载证书文件:验证通过后,下载包含以下文件的压缩包:
yourdomain.com.pem(证书文件)yourdomain.com.key(私钥文件)yourdomain.com.chain.pem(证书链文件,部分证书可能不包含)
2. 上传证书到服务器
ruby
bash
# 创建 SSL 证书目录(建议放在 /etc/nginx/ssl/ 下)
sudo mkdir -p /etc/nginx/ssl/
# 上传证书文件到服务器
# 可通过 scp、sftp 或云存储等方式上传
# 示例:使用 scp 从本地上传
scp ~/Downloads/yourdomain.com.* username@your_server_ip:/etc/nginx/ssl/
# 设置正确的文件权限
sudo chmod 600 /etc/nginx/ssl/*.key
sudo chmod 644 /etc/nginx/ssl/*.pem
3. 配置 Nginx
- 编辑 Nginx 配置文件:
arduino
bash
sudo nano /etc/nginx/sites-available/yourdomain.com
-
粘贴上述配置模板,并修改以下参数:
server_name:替换为你的实际域名- 文件路径:修改为你的证书文件实际路径
-
创建符号链接(如果使用 sites-enabled 目录) :
bash
bash
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
4. 测试并重启 Nginx
bash
bash
# 测试配置语法
sudo nginx -t
# 重启 Nginx 使配置生效
sudo systemctl restart nginx
# 检查服务状态
sudo systemctl status nginx
5. 验证部署结果
-
浏览器检查:
- 访问
https://yourdomain.com,确认浏览器地址栏显示安全锁图标 - 点击锁图标查看证书信息,确认颁发者为 JoySSL
- 访问
-
在线测试工具:
- 使用 SSL Labs 测试 检查配置安全性
- 使用 HSTS Preload 测试 验证 HSTS 配置
三、高级优化配置
1. 启用 Session 复用
ini
nginx
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
2. 配置 TLS 1.3 专用参数(Nginx 1.13.0+)
ini
nginx
ssl_conf_command Options ServerPreference;
ssl_conf_command Signatures rsa_pss_rsae_sha256 rsa_pss_rsae_sha384 rsa_pss_rsae_sha512;
3. 配置 0-RTT(需要 TLS 1.3 支持)
csharp
nginx
ssl_early_data on; # 需客户端支持,可能存在重放攻击风险,谨慎使用
四、常见问题解决
1. 证书验证失败
-
问题原因:DNS 记录未生效或文件验证路径错误
-
解决方案:
- DNS 验证:等待 DNS 记录全球同步(通常需要 5-30 分钟)
- 文件验证:确认验证文件已上传至网站根目录且可通过
http://yourdomain.com/.well-known/pki-validation/file.txt访问
2. Nginx 启动失败
- 问题原因:配置文件语法错误或证书路径错误
- 解决方案:
bash
bash
# 检查具体错误信息
sudo nginx -t
# 根据错误提示修正配置
3. 浏览器显示"不安全"
-
问题原因:混合内容(HTTP/HTTPS 混用)或证书链不完整
-
解决方案:
- 检查页面所有资源是否使用 HTTPS 加载
- 确保证书链文件(
.chain.pem)已正确配置
五、自动续期配置(可选)
1. 使用 Certbot 自动续期(适用于 DNS 验证)
perl
bash
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx
# 配置自动续期(需提前配置 DNS API 凭证)
sudo certbot renew --dry-run
# 实际续期命令
sudo certbot renew --quiet --no-self-upgrade
2. JoySSL 官方自动续期工具
- 登录 JoySSL 控制台
- 进入证书管理页面
- 启用"自动续期"功能(需配置服务器 SSH 访问权限)
六、安全建议
- 定期更新 Nginx:保持最新版本以修复安全漏洞
- 监控证书有效期:设置提前 30 天续期提醒
- 启用防火墙:仅开放 443(HTTPS)和 80(HTTP 重定向)端口
- 定期审计 :使用工具如
lynx -dump https://yourdomain.com检查混合内容
通过以上配置,你的网站将获得:
- A+ 级 SSL 安全评级
- 完整的 HSTS 策略保护
- 优化的 TLS 握手性能
- 自动化的证书续期能力