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


14

这是我得到的错误:

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

我100%确定文件位于该位置,但是Nginx似乎认为它不存在。我按顺序合并了domain.crtintermediate.crt。我整天都在挠头。我希望有人看到了这个错误并找到了解决方案。(另外请注意,粘贴文件位置仅显示一次,而不是在``没有这样的文件或目录''之后再显示,这不是错误)。


3
path/to/cert.pem当然不是有效的位置。
迈克尔·汉普顿

您正确地假设这不是实际路径。但是,我可以轻松地将该位置设置为有效位置。但是由于这家公司的原因,我无法为您提供具体信息。我必须省略用户名。
tgoza

Answers:


15

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

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

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

编辑

尝试将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是否这样做),但是上述设置应该可以正常工作。


我仔细检查了路径,并/在开始时确实包含,因此我更改了问题以反映这一点。该文件位于,/home/user/subdirs并且其中的所有文件和目录权限均由user.www-data(username.group名称)和775设置拥有。而且我认为nginx可以访问www-data拥有的任何内容,尽管我可能会误会。
tgoza

总是需要永远找出来的简单错误:)很高兴您能解决。
Jim W.

看起来如何?我已经加入了我,$root/keys/所以我的证书行看起来像ssl_certificate keys/cert.pem...它们必须在webroot中吗?
璀璨之星

使用绝对路径可以解决问题。
璀璨之星

我使用的是docker-container,每次重新创建容器时都遇到此问题。添加chmod -R 600 /etc/nginx/ssl我的入口点解决问题,谢谢
Dimitri Kopriwa

3

如果有人遇到这个问题,我将保留我的答案。

我在docker容器中运行了nginx,尝试访问私钥文件时遇到相同的错误。挠了几个小时后,我意识到我的码头工人的nginx没有包含我的数据的装载卷。

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

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

有时候,琐碎的事情很难看到。希望对您有所帮助。


2

可能的情况:

有时可能会发生以下情况:在为正在配置的Virtualhost配置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)

必须做什么?

指定Virtualhost配置使用的其他文件的绝对路径。

像这样:

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

}

-1

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

HTTPS-代理请求到本地Node.js ap#HTTPS-代理请求到本地Node.js应用:服务器{监听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引用时,一切都很好!我发现很多开发人员都在问同样的问题,所以我想把解决方案扔出去,以寻求帮助,因为我发现的答案主要是关于root权限的,但在我看来,root权限不是问题。开发上的岩石。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.