文章目录
- 现象:
- 排查:
- 处理措施:
- 验证:
现象:
root@sandbox:/opt/nginx/sbin# ./nginx -t
nginx: [emerg] SSL_CTX_load_verify_locations("/opt/nginx/conf/none") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/opt/nginx/conf/none','r') error:2006D080:BIO routines:BIO_new_file:no such file error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib)
nginx: configuration file /opt/nginx/conf/nginx.conf test failed
Nginx 配置文件中存在 SSL/TLS 相关的指令,并且指定了一个无效的证书文件路径。具体来说,Nginx 尝试加载 /opt/nginx/conf/none 文件作为证书文件,但该文件不存在,因此加载失败。
排查:
1、检查nginx所有conf中引用的ssl路径是否正确?/证书有效性?/文件权限?
2、上述错误提示加载ssl证书找不到 /opt/nginx/conf/none ,但是nginx配置中压根就没配置
3、匹配查找有咩有关于 none字段的配置?
发现配置启用了 proxy_ssl_verify on,那么 Nginx 将验证反向代理服务器的 SSL/TLS 证书,以确保它是由受信任的证书颁发机构(CA)签发的,并且具有正确的主机名。如果验证失败,Nginx 将拒绝连接到反向代理服务器,并返回一个 SSL/TLS 错误。
root@sandbox:/opt/nginx/sites-available# grep -rn none *
cloud/prompt-test.conf:18: proxy_ssl_trusted_certificate none; # 不使用本地 CA 证书
root@sandbox:/opt/nginx/sites-available# grep -rn verify *
cloud/prompt-test.conf:20: ssl_verify_client off;
cloud/prompt-test.conf:38: proxy_ssl_verify on;4、详细解析此conf文件
upstream prom-node {server 192.168.10.23:6443; #server 192.168.10.24:6443; #server 192.168.10.27:6443; #keepalive 32;
}server {listen 443;server_name prompt-test-apiserver.demo.com;access_log /opt/nginx/logs/prompt-test-apiserver.log main;error_log /opt/nginx/logs/prompt-test-apiserver.log;ssl off;ssl_session_timeout 5m;ssl_prefer_server_ciphers on;proxy_ssl_trusted_certificate none; # 不使用本地 CA 证书proxy_ssl_session_reuse on; # 获取外部请求的 CA 证书ssl_verify_client off;proxy_buffering off;add_header Vary Accept-Encoding;client_max_body_size 128m;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_redirect off;proxy_http_version 1.1;proxy_set_header Connection "";# retry next upstreamproxy_next_upstream error timeout http_570;limit_conn servicelimit 2000;location / {proxy_pass https://prom-node;proxy_ssl_verify on;proxy_ssl_server_name on;proxy_ssl_name kubernetes;}
}配置介绍:
ssl off:禁用 SSL/TLS,因为没有在该 Nginx 配置中提供 SSL/TLS 相关设置
proxy_pass https://prom-node:将来自 https://prom-node 上游服务器的请求代理到本地的 Nginx 服务器上。
proxy_ssl_verify on:启用 SSL/TLS 验证,以确保代理请求的上游服务器使用有效的 SSL/TLS 证书。
proxy_ssl_server_name on:启用 SSL/TLS 验证时使用服务器名验证,以确保上游服务器的 SSL/TLS 证书与当前正在连接的服务器名匹配。
proxy_ssl_name kubernetes:设置 SSL/TLS 连接的服务器名为 kubernetes,这通常是为了在 SSL/TLS 握手期间验证上游服务器的 SSL/TLS 证书。
最终排查下来因为上游服务器不可用,随之ssl也无法继续提供,这个时候执行Nginx -t 时,找不到上游服务器的ssl就会从本地找,因为配置了proxy_ssl_trusted_certificate none
,所以Ngx在/opt/nginx/conf/下寻找none
处理措施:
1.关闭代理ssl验证
proxy_ssl_verify off; #设置为off或者关闭2.下线此conf(因当前环境不用这个配置了,所以博主直接清理了)
验证:
root@sandbox:~# /opt/nginx/sbin/nginx -t
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful