文档中心
Nginx閰嶇疆SSL璇佷功瀹屾暣鏁欑▼浠庨浂寮€濮嬪疄鐜癏TTPS鍔犲瘑
时间 : 2025-09-27 16:27:46浏览量 : 3

在当今网络安全威胁日益严峻的环境下,为网站启用HTTPS加密已成为基本要求。作为最流行的Web服务器之一,Nginx配置SSL证书不仅能保护用户数据安全,还能提升SEO排名。本文将手把手教你完成Nginx SSL证书配置的全过程,即使你是新手也能轻松搞定。
一、SSL证书基础概念科普
SSL证书就像网站的"身份证"和"保险箱":
- 身份认证:证明你访问的是真实官网(比如防止假冒的银行网站)
- 数据加密:传输内容变成乱码,即使被拦截也无法读取
常见证书类型对比:
1. DV证书(域名验证):最快签发,只需验证域名所有权
- 适用场景:个人博客、测试环境
- 举例:Let's Encrypt颁发的免费证书
2. OV证书(组织验证):需验证企业真实性
- 适用场景:企业官网
- 举例:DigiCert OV证书
3. EV证书(扩展验证):浏览器地址栏显示公司名称
- 适用场景:金融、电商平台
- 举例:支付宝使用的GlobalSign EV证书
二、准备工作清单
在开始配置前需要准备:
1. 已安装Nginx的服务器(建议版本1.15+)
2. 域名指向服务器IP(A记录解析)
3. SSL证书文件(通常包含:
- `.crt`或`.pem`(证书文件)
- `.key`(私钥文件)
- 可能有`.ca-bundle`(中间证书)
*实战技巧*:使用以下命令检查Nginx是否支持SSL:
```bash
nginx -V | grep ssl
```
如果看到`--with-http_ssl_module`表示支持。
三、详细配置步骤
案例1:单域名基础配置
假设你的域名是`example.com`,证书文件已上传到:
- `/etc/ssl/certs/example.crt`
- `/etc/ssl/private/example.key`
编辑Nginx配置文件(通常位于`/etc/nginx/sites-available/default`):
```nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
增强安全性的推荐设置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
其他常规配置...
}
案例2:多域名SAN证书配置
如果你的证书包含多个备用名称(SAN),比如同时保护:
- example.com
- www.example.com
- api.example.com
配置只需指定同一个证书即可:
server_name example.com www.example.com api.example.com;
ssl_certificate /etc/ssl/certs/multi_domain.crt;
ssl_certificate_key /etc/ssl/private/multi_domain.key;
...其他相同配置
HTTP强制跳转HTTPS
在所有HTTP访问的server块中添加:
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
四、高级安全加固方案
HSTS头设置
预防SSL剥离攻击,告诉浏览器强制使用HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
*参数说明*:
- `max-age=31536000`:有效期1年(单位秒)
- `includeSubDomains`:包含所有子域名
OCSP装订优化
加速SSL握手过程:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/ca_bundle.crt;
五、排错指南
常见问题及解决方法:
1. 错误:"SSL handshake failed"
- ??检查私钥是否匹配:`openssl x509 -noout -modulus -in cert.crt | openssl md5`
- ??对比私钥MD5:`openssl rsa -noout -modulus -in private.key | openssl md5`
2. 错误:"certificate has expired"
- ??查看有效期:`openssl x509 -enddate -noout -in cert.crt`
3. 性能优化提示
```nginx
ssl_session_cache shared:SSL:10m;
缓存10MB会话数据
ssl_session_timeout 24h;
会话有效期24小时
```
六、自动化维护技巧
使用Certbot自动续期Let's Encrypt证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com --register-unsafely-without-email
设置定时任务(每月自动续期):
0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot renew --quiet --post-hook "systemctl reload nginx"
通过以上步骤,你的网站已经实现了企业级HTTPS防护。记得使用[SSL Labs测试工具](https://www.ssllabs.com/ssltest/)检测配置得分,理想情况下应该达到A+评级。遇到任何问题欢迎在评论区留言讨论!
TAG:nginx配置ssl证书完整教程,nginx ssl_ciphers配置,nginx配置ssl证书无效,nginx ssl pem,nginx如何配置ssl证书