Nginx启动失败ssl没有这样的文件或目录

这是我得到的错误:

重新加载nginxconfiguration:nginx:[emerg] SSL_CTX_use_certificate_chain_file(“/ path / to / cert.pem”)failed(SSL:error:02001002:system library:fopen:No such file or directory error:20074002:BIO routines:FILE_CTRL:system lib错误:140DC002:SSL例程:SSL_CTX_use_certificate_chain_file:系统库)nginx:configuration文件/etc/nginx/nginx.conftesting失败

我100%确定该文件位于该位置,但Nginx似乎认为它不在那里。 我按顺序手动合并了domain.crtintermediate.crt 。 我一整天都在摸索这个问题。 我希望有人看到这个错误,并有一个解决scheme(并注意这不是一个粘贴错误的文件位置只显示一次,而不是在'没有这样的文件或目录后')。

你确定Nginx的用户可以访问目录吗?

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

如果权限是正确的,你可能会再次检查实际的path。 你怎么粘贴它(我知道你删除了目录)没有开始/这可能是问题。

编辑

尝试将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上失败,因为权限太开放(需要源代码来validationNginx是否这样做),但上面的设置应该可以正常工作。

一种可能的情况:

有时可能会发生这样的情况:在为正在configuration的虚拟主机configurationSSL文件(私钥和证书)时,忘记指定这些文件所在的绝对path。

例如,如果您遵循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使用的普通文件没有指定绝对path时,Nginx会search“/ 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) 

必须做什么?

指定虚拟主机configuration使用的其他文件的绝对path。

喜欢这个:

 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; } } 

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

我有nginx在Docker容器中运行,并尝试访问私钥文件具有相同的错误。 抓了几个小时之后,我意识到我的docker的nginx没有包含我的数据的安装卷。

添加挂载卷的唯一select是使用-v选项删除并重新创build容器: https : //docs.docker.com/engine/tutorials/dockervolumes/

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

有时,琐碎的事情很难看到。 希望这个帮助。

我遇到过同样的问题。 在安装过程中,我必须更改/ etc / nginx / sites-enabled / default&default.save文件 ,这些文件在安装过程中自动添加了我的站点名称, 而没有.com ,这是我的实例 。 为了保持简短,需要在/ etc / nginx / sites-enabled / default中更改这两行。 请注意,该文件在我的文件系统中显示为一个快捷方式图标,但是我可以右键单击该文件并使用“编辑/内部编辑器”选项进行编辑。

HTTPS – 对本地Node.js的代理请求ap#HTTPS – 对本地Node.js的代理请求app:server {listen 443; server_name switchmagic.com;

  ssl on; # Use certificate and key provided by Let's Encrypt: ssl_certificate /etc/letsencrypt/live/switchmagic.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/switchmagic.com/privkey.pem; 

当我浏览这些文件,并添加了.com,这是我用来添加文件的命名约定,在文件目录中引发错误的switchmagic引用, 一切都很好! 我发现很多开发人员都问同一个问题,所以我想把我的解决scheme放在那里帮助,因为我发现的答案主要是关于根权限,但是根权限在我的情况下不是问题。 摇滚开发。