Nginx 启动失败 ssl 没有此文件或目录

Nginx 启动失败 ssl 没有此文件或目录

这是我收到的错误:

重新加载 nginx 配置:nginx:[emerg] SSL_CTX_use_certificate_chain_file(“/path/to/cert.pem”)失败(SSL:错误:02001002:系统库:fopen:没有此文件或目录错误:20074002:BIO 例程:FILE_CTRL:系统库错误:140DC002:SSL 例程:SSL_CTX_use_certificate_chain_file:系统库)nginx:配置文件 /etc/nginx/nginx.conf 测试失败

我 100% 确定该文件位于该位置,但 Nginx 似乎认为它不在那里。我按照该顺序手动合并了和domain.crtintermediate.crt我整天都在为此绞尽脑汁。我希望有人看到这个错误并有解决方案。(附注:在“没有这样的文件或目录”之后,文件位置只显示一次,不再显示,这不是粘贴错误)。

答案1

您确定 Nginx 用户有权访问该目录吗?

还要检查该文件的权限.pem,如果 Nginx 无法访问它,它可以显示为'no such file or directory'

如果权限正确,您可以再次检查实际路径。您如何粘贴它(我知道您删除了目录)没有开头,/这可能是问题所在。

编辑

尝试将您的 SSL 设置移至以下结构(以及更改nginx.conf以反映):

sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl

Nginx 可能会.pem因为权限太开放而失败(需要源来验证 Nginx 是否这样做)但上述设置应该可以正常工作。

答案2

我将留下我的问题的答案,以防有人遇到这个话题。

我在docker容器内运行nginx,尝试访问私钥文件时遇到同样的错误。经过几个小时的思考,我意识到我的docker的nginx没有包含我的数据的挂载卷。

添加挂载卷的唯一选项是使用以下选项删除并重新创建容器-vhttps://docs.docker.com/engine/tutorials/dockervolumes/

docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx

有时,琐碎的事情很难被注意到。希望这能有所帮助。

答案3

可能的情况:

有时可能会发生这种情况,在为正在配置的虚拟主机配置 SSL 文件(私钥和证书)时,忘记指定这些文件所在的绝对路径。

例如,如果你遵循 Nginx 的官方文档:http://nginx.org/en/docs/http/configuring_https_servers.html

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     tdmssl.crt;
    ssl_certificate_key tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

假设你将 SSL 文件存储在“/etc/nginx/conf.d“:

root@ilg40:/etc/nginx/conf.d# pwd
/etc/nginx/conf.d
root@ilg40:/etc/nginx/conf.d# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 24 17:39 ./
drwxr-xr-x 5 root root 4096 Jan 24 21:15 ../
-rw-r--r-- 1 root root 1359 Jan 24 17:39 tdmssl.crt
-rw-r--r-- 1 root root 1675 Jan 24 17:39 tdmssl.key

会发生什么?

默认情况下,当没有指定Nginx使用的普通文件的绝对路径时,Nginx会在“/etc/nginx”中搜索文件

来自 /var/log/nginx/error.log

2017/01/24 21:05:10 [emerg] 13113#0: 
BIO_new_file("/etc/nginx/tdmssl.crt") 
failed(SSL:error:02001002:system library:fopen:
No such file or directory:fopen('/etc/nginx/tdmssl.crt','r') 
error:2006D080:BIO routines:BIO_new_file:no such file)

必须要做的事项是什么?

指定虚拟主机配置使用的附加文件的绝对路径。

像这样:

root@ilg40:/etc/nginx/conf.d# cd
root@ilg40:~# cat /etc/nginx/sites-available/tdm 
server {

    listen          443 ssl;
    server_name         tjsdatamanager.redtjs.com;
    ssl_certificate     /etc/nginx/conf.d/tdmssl.crt;
    ssl_certificate_key /etc/nginx/conf.d/tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        include proxy_params;
        proxy_pass http://unix:/etc/tdm/flask/wsgi.sock;
    }

}

答案4

我也遇到了同样的问题。

[症状]
无法使用“systemctl restart nginx”启动。
但以下命令可以启动 nginx。
“/usr/sbin/nginx”

[原因]
我直接使用了从提供商处下载的证书文件。

[已解决]
我已复制证书文本并将其粘贴到我创建的文件中(通过 vim)。

相关内容