Запуск 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.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

Я оставлю свой ответ на мою проблему, на случай, если кто-то столкнется с этой темой.

У меня запущен nginx внутри контейнера docker, и при попытке доступа к файлу закрытого ключа возникает та же ошибка. Почесав голову несколько часов, я пришел к выводу, что у моего 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)

Что нужно сделать?

Указать абсолютный путь к дополнительным файлам, которые используются вашей конфигурацией 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;
    }

}

решение4

Я столкнулся с той же проблемой.

[симптом]
Он не может запуститься с помощью "systemctl restart nginx".
Но команда ниже может запустить nginx.
"/usr/sbin/nginx"

[причина]
Я использовал файл сертификата, напрямую загруженный с провайдера.

[решено]
Я скопировал текст сертификата и вставил его в созданный мной файл (с помощью vim).

Связанный контент