Nginx SSL证书配置:从申请到HTTPS生效的完整步骤
给网站开启 HTTPS,核心就是在 Nginx 里加载 SSL 证书文件,并让 443 端口监听请求。
只要证书文件和私钥匹配、配置路径正确、端口已放行,执行 nginx -t 通过后重载服务即可生效。
下面按实际操作顺序讲清楚每一步。
开始前先确认三件事
配置之前先确认环境,能避免大部分低级错误。
登录服务器,执行:
nginx -v
能输出版本号说明 Nginx 已安装。
如果提示 command not found,需要先安装 Nginx。
然后确认你手里有证书文件。
常见证书包解压后包含以下文件:
yourdomain.crt或fullchain.pem:证书链文件,Nginx 用这个yourdomain.key:私钥文件,必须保密chain.pem或ca_bundle.crt:中间证书,部分证书商会单独提供
把这两个文件上传到服务器,建议路径:
/etc/nginx/ssl/yourdomain.crt
/etc/nginx/ssl/yourdomain.key
目录不存在就先创建:
mkdir -p /etc/nginx/ssl
注意:私钥文件权限建议设为 600,只允许 root 读取。
chmod 600 /etc/nginx/ssl/yourdomain.key
编写 443 端口的 server 配置
找到 Nginx 配置文件,通常在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/ 下。
新建一个配置文件,例如 /etc/nginx/conf.d/yourdomain.conf。
写入以下内容:
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/nginx/ssl/yourdomain.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
root /var/www/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
关键点说明:
listen 443 ssl;表示这个 server 块处理 HTTPS 请求ssl_certificate和ssl_certificate_key路径必须与实际文件位置一致server_name要写实际域名,不要保留示例域名root改成你网站的真实根目录
如果你的证书商提供的是 fullchain.pem,就把 ssl_certificate 指向它,不要只指向单独的域名证书,否则部分浏览器会提示证书链不完整。
检查配置、放行端口并重载
配置写完后不要直接重启,先测试语法:
nginx -t
输出 syntax is ok 和 test is successful 才算通过。
如果有报错,按提示行号检查路径和分号。
然后确认防火墙和云服务器安全组都已放行 443 端口。
以 firewalld 为例:
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
如果用的是 ufw:
ufw allow 443/tcp
云服务器还需要在控制台的安全组里添加入方向规则,允许 TCP 443。
这一步经常被忽略,导致配置没问题但外网访问不通。
最后重载 Nginx:
systemctl reload nginx
验证 HTTPS 是否真正生效
先用 curl 在服务器本机测试:
curl -I https://yourdomain.com
返回 HTTP/2 200 或 HTTP/1.1 200 说明 HTTPS 已通。
如果返回证书错误,检查证书文件是否完整、域名是否匹配。
再用浏览器访问,点击地址栏的锁图标,查看证书详情。
确认颁发者和有效期正确。
如果想让 HTTP 自动跳转到 HTTPS,再加一个 80 端口的 server 块:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
再次执行 nginx -t 和 systemctl reload nginx。
常见报错怎么排查
报错 cannot load certificate:多数是路径写错或文件不存在。
用 ls -l 确认路径,注意大小写。
浏览器提示证书不受信任:通常是只配了域名证书,没有配中间证书。
把 fullchain.pem 或合并后的证书链文件指向 ssl_certificate。
443 端口无法连接:按顺序检查 Nginx 是否运行、防火墙是否放行、云安全组是否放行。
配置测试通过但访问仍是旧证书:可能是浏览器缓存,也可能是 Nginx 没有真正重载。
执行 systemctl reload nginx 后换浏览器无痕模式再试。
证书即将过期:免费证书一般有效期较短,建议在到期前重新签发并替换文件,然后重载 Nginx。
可以配合 certbot 等工具自动续期,但自动续期后仍需确认重载步骤是否配置正确。
整个流程中,最容易出问题的不是配置语法,而是证书链不完整和 443 端口未放行。
配置完成后用 curl -I 和浏览器双重验证,能快速定位是配置问题还是网络问题。