这是我收到的错误:
重新加载 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.crt
。intermediate.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没有包含我的数据的挂载卷。
添加挂载卷的唯一选项是使用以下选项删除并重新创建容器-v
:
https://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)。