配置 SSL 证书到 Nginx 服务器的方法
为 Nginx 服务器配置 SSL 证书,可以实现 HTTPS 加密访问,提升网站安全性。即使是免费的 SSL 证书,配置流程也基本相同。以下是详细的配置步骤和注意事项。
步骤一:修改 Nginx 配置文件
首先,需要编辑 Nginx 的配置文件(通常是 nginx.conf 或在 sites-available/ 目录下的站点配置文件)。配置的目标是:
- 将 HTTP(80端口)请求重定向到 HTTPS(443端口)。
- 在 HTTPS 服务器块中启用 SSL 并指定证书和私钥的路径。
以下是一个标准的配置示例:
server {
listen 80;
server_name www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name www.yourdomain.com;
root /home/www;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
# 其他 SSL 配置(可选)
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5;
}
配置说明:
server_name:请替换为你的实际域名。root:请替换为你的网站根目录路径。ssl_certificate和ssl_certificate_key:分别指向你的 SSL 证书文件(.crt 或 .pem)和私钥文件(.key)的完整路径。请根据你的实际存放位置修改。- 在现代 Nginx 版本中,
ssl on;指令已被弃用,推荐使用listen 443 ssl;语法。 - 使用
return 301进行重定向比rewrite ... permanent;更高效且语义更清晰。
步骤二:处理证书链(重要)
配置完成后重启 Nginx,有时可能会收到证书颁发机构(CA)的警告邮件,提示证书安装不完整。这通常是因为缺少中间证书(Intermediate Certificate)。
浏览器需要构建一条完整的信任链,从你的服务器证书回溯到根证书。如果服务器没有发送中间证书,浏览器可能无法验证,导致安全警告。
解决方法: 将中间证书(有时还包括根证书)与你的服务器证书合并到一个文件中。
以旧版 StartSSL(现已被收购)为例,操作流程如下:
# 下载根证书和中间证书(链接已过时,仅作示例)
wget http://cert.startssl.com/certs/ca.pem
wget http://cert.startssl.com/certs/sub.class1.server.ca.pem
# 将根证书和中间证书合并为一个证书链文件
cat ca.pem sub.class1.server.ca.pem > ca-certs.crt
# 将你的服务器证书与证书链文件合并
cat your_server.crt ca-certs.crt > /etc/nginx/certs/server.crt
通用方法:
- 从你的证书颁发机构(如 Let's Encrypt、DigiCert、Sectigo 等)获取中间证书文件(通常可在其官网下载)。
- 使用文本编辑器或
cat命令,按顺序合并证书:你的域名证书在前,中间证书在后。例如:cat your_domain.crt intermediate.crt > /etc/nginx/ssl/bundle.crt - 在 Nginx 配置中,将
ssl_certificate指向这个合并后的文件(如bundle.crt)。
Let's Encrypt 颁发的证书(通过 Certbot 工具获取)通常会自动处理好证书链,其生成的 fullchain.pem 文件就是合并好的证书,可直接用于配置。
步骤三:重启 Nginx 并测试
- 保存配置文件后,测试配置语法是否正确:
nginx -t - 如果测试通过,重启 Nginx 以应用新配置:
systemctl reload nginx # 或 service nginx reload - 使用浏览器访问你的网站(使用 HTTPS 协议),检查地址栏是否有锁形标志。你也可以使用在线 SSL 检测工具(如 SSL Labs 的 SSL Server Test)进行全面检查。
遵循以上步骤,即可成功为 Nginx 服务器配置 SSL 证书,实现全站 HTTPS 加密。使用免费证书(如 Let's Encrypt)同样遵循此流程,且自动化工具可以简化证书申请和续期。