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 模块。sudo yum install -y openssl-devel(版本与 Nginx 兼容,如 OpenSSL 1.1.1k)。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 使配置生效。二 证书与端口类问题
/etc/nginx/ssl/example.com_bundle.crt 或 fullchain.pem/etc/nginx/ssl/example.com.keyserver {
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。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"(旧语法或编译问题)。listen 443 ssl;,旧版本常见写法 listen 443; ssl on;(二选一,勿混用)。listen 443 ssl http2; # 推荐同时开启 HTTP/2
# 删除或注释:ssl on;
sudo nginx -t && sudo systemctl reload nginx。四 快速排查清单与最小化可用配置
nginx -V 2>&1 | grep http_ssl_module 必须存在。sudo nginx -t 必须返回 syntax is ok 与 test is successful。# 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。