nginx `error:2006D080:BIO routines:BIO_new_file:no such file error`

这篇具有很好参考价值的文章主要介绍了nginx `error:2006D080:BIO routines:BIO_new_file:no such file error`。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现象:

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 upstream
        proxy_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 文章来源地址https://www.toymoban.com/news/detail-552974.html

处理措施:

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

到了这里,关于nginx `error:2006D080:BIO routines:BIO_new_file:no such file error`的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包