centos nginx ssl配置常见问题解答
CentOS 上 Nginx SSL 配置常见问题解答
一 快速自检清单
- 确认 Nginx 已启用 SSL 模块:执行 nginx -V 2> & 1 | grep – ‘–with-http_ssl_module’,若未出现则需重新编译加入该模块。证书路径使用相对路径(如 cert/xxx.pem)更稳妥,避免绝对路径导致找不到文件。
- 证书文件与权限:确保 .crt/.pem 与 .key 已上传至如 /usr/local/nginx/conf/cert/,权限建议 600/644,属主与 Nginx 运行用户一致。
- 监听端口与协议:在 server 块中使用 listen 443 ssl; (Nginx ≥1.15.0 推荐此写法;老版本可用 listen 443; ssl on; )。
- 防火墙与安全组:放行 TCP 443;云服务器需同时检查 安全组/系统防火墙(firewalld/iptables)。
- 配置语法与重载:执行 nginx -t 校验,通过后 nginx -s reload 或 systemctl reload nginx 生效。
- 访问验证:浏览器访问 https://域名 检查锁标识;使用 SSL Labs Server Test 做进一步检测。
二 常见报错与修复
-
报错:nginx: [emerg] the “ssl” parameter requires ngx_http_ssl_module
原因:Nginx 未编译进 SSL 模块。
修复:进入 Nginx 源码目录,执行 ./configure --with-http_ssl_module(按需带上原有参数),make 后将新 objs/nginx 覆盖安装并重启。 -
报错:BIO_new_file() failed … No such file or directory
原因:证书路径错误或文件不存在。
修复:核对 ssl_certificate/ssl_certificate_key 路径,优先使用相对路径(如 cert/domain.pem),并确认文件已上传且权限正确。 -
访问 https 出现 404
原因:HTTPS 的 443 端口没有配置根目录或反向代理。
修复:在 listen 443 ssl 的 server 块中正确设置 root 或 proxy_pass。 -
访问被拒绝或超时
原因:未放行 443 端口(云上需安全组,系统需 firewalld/iptables)。
修复:开放 443/tcp,并验证本机监听 netstat -tulpen | grep :443。 -
配置测试通过但浏览器报证书不受信任
原因:使用了 自签名证书 或证书链不完整。
修复:使用 Let’s Encrypt/ca-bundle 等可信 CA 证书,确保 fullchain 或 bundle 文件配置正确。
三 推荐配置示例
- 现代、安全的基础配置(Nginx ≥1.15.0)
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /usr/local/nginx/conf/cert/yourdomain.crt;
ssl_certificate_key /usr/local/nginx/conf/cert/yourdomain.key;
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;
ssl_session_cache shared:MozSSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
}
- HTTP 自动跳转 HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
- 证书链说明:部分厂商提供 bundle/crt 与 key;若文件包含多个证书(链),请按厂商说明合并为 fullchain 或依次配置链证书,确保浏览器完整链验证。
四 进阶与运维建议
- 启用 HTTP/2 提升性能:在 listen 443 后添加 http2。
- 安全评分与优化:使用 SSL Labs Server Test 检测并优化协议与套件;按需开启 HSTS。
- 证书自动化:使用 Certbot 自动申请与续期(如 certbot --nginx),减少过期风险。
- 反向代理场景:在 location 中使用 proxy_set_header 传递 Host/X-Real-IP/X-Forwarded-For,确保后端获取真实客户端信息。
- 变更流程:任何配置变更先 nginx -t,再 reload;保留回滚方案与变更记录。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos nginx ssl配置常见问题解答
本文地址: https://pptw.com/jishu/778860.html
