centos nginx ssl配置常见问题及解决方法
导读:CentOS 上 Nginx SSL 配置常见问题与排查清单 一 模块与依赖类问题 症状与报错 执行 nginx -s reload 出现:the "ssl" parameter requires ngx_http_ssl_module...
CentOS 上 Nginx SSL 配置常见问题与排查清单
一 模块与依赖类问题
- 症状与报错
- 执行
nginx -s reload出现:the "ssl" parameter requires ngx_http_ssl_module或unknown directive “ssl”。 - 编译时报错:
./configure: error: SSL modules require the OpenSSL library。
- 执行
- 快速自检
- 查看编译参数:
nginx -V 2> & 1 | grep -- '--with-http_ssl_module',若未出现--with-http_ssl_module说明未编译 SSL 模块。
- 查看编译参数:
- 解决办法
- 安装 OpenSSL 开发库(示例):
sudo yum install -y openssl-devel(版本与 Nginx 兼容,如 OpenSSL 1.1.1k)。 - 进入 Nginx 源码目录重新配置并编译(不要
make install):./configure --with-http_ssl_module make sudo cp objs/nginx /usr/local/nginx/sbin/nginx # 备份原二进制后覆盖 - 再次验证:
nginx -V 2> & 1 | grep http_ssl_module应能看到模块,随后nginx -t & & sudo systemctl reload nginx使配置生效。
- 安装 OpenSSL 开发库(示例):
二 证书与端口类问题
- 症状与报错
- 浏览器提示“证书无效/域名不匹配/证书链不完整”。
- 访问 https://域名 超时或无法建立连接。
- 快速自检
- 核对证书与域名匹配(含子域、泛域)、证书未过期;证书链是否完整(多数云厂商 Nginx 包内含 bundle.crt 或 fullchain.pem 与 .key)。
- 检查 443 端口与防火墙/云安全组是否放行(CentOS 常见为 firewalld/云厂商安全组)。
- 解决办法
- 正确放置证书与私钥(示例路径):
- 证书链:
/etc/nginx/ssl/example.com_bundle.crt或fullchain.pem - 私钥:
/etc/nginx/ssl/example.com.key
- 证书链:
- 典型 server 配置片段(证书路径与域名请按实际替换):
server { listen 443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com_bundle.crt; # 或 fullchain.pem ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 可选:OCSP Stapling # ssl_stapling on; # ssl_stapling_verify on; # ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; # resolver 8.8.8.8 8.8.4.4 valid=300s; location / { root /usr/share/nginx/html; index index.html; } } - 防火墙放行示例:
sudo firewall-cmd --permanent --add-port=443/tcp & & sudo firewall-cmd --reload;如使用云服务器,同步在安全组放行 443。 - 全站跳转 HTTP→HTTPS(在 80 端口 server 中):
server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } - 校验与生效:
sudo nginx -t & & sudo systemctl reload nginx。
- 正确放置证书与私钥(示例路径):
三 配置语法与兼容性问题
- 症状与报错
nginx: [emerg] "ssl" parameter requires ngx_http_ssl_module(仍未解决模块问题)。nginx: [emerg] unknown directive "ssl"(旧语法或编译问题)。- 配置测试通过但浏览器仍显示不安全或握手失败。
- 快速自检
- 确认 Nginx 版本 ≥ 1.15.0 时使用
listen 443 ssl;,旧版本常见写法listen 443; ssl on;(二选一,勿混用)。 - 证书路径、权限与 SELinux 上下文是否正确(证书文件建议权限 600,属主 root:root)。
- 确认 Nginx 版本 ≥ 1.15.0 时使用
- 解决办法
- 统一采用现代写法并删除过时指令:
listen 443 ssl http2; # 推荐同时开启 HTTP/2 # 删除或注释:ssl on; - 校验与热加载:
sudo nginx -t & & sudo systemctl reload nginx。 - 若仍报未知指令,回到“模块与依赖类问题”确保已编译进 http_ssl_module。
- 统一采用现代写法并删除过时指令:
四 快速排查清单与最小化可用配置
- 排查清单
- 模块:
nginx -V 2> & 1 | grep http_ssl_module必须存在。 - 证书:域名匹配、未过期、链完整(优先使用 fullchain 或 bundle)。
- 端口与网络:443 已放行(firewalld/云安全组/运营商安全策略)。
- 配置语法:
sudo nginx -t必须返回syntax is ok与test is successful。 - 权限与路径:证书与私钥路径正确、权限 600、属主 root。
- 浏览器侧:清除缓存或用隐身模式,检查证书链与颁发者。
- 模块:
- 最小化可用配置示例
应用步骤:# HTTP → HTTPS server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } # HTTPS server { listen 443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com_bundle.crt; # 或 fullchain.pem ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { root /usr/share/nginx/html; index index.html; } }sudo nginx -t & & sudo systemctl reload nginx;若使用云服务器,请同步在安全组放行 443。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos nginx ssl配置常见问题及解决方法
本文地址: https://pptw.com/jishu/769903.html
