Не удается запустить Nginx, так как нет такого файла или каталога

14

Вот ошибка, которую я получаю:

Не удалось перезагрузить конфигурацию nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file ("/ path / to / cert.pem") (SSL: ошибка: 02001002: системная библиотека: fopen: такого файла или каталога нет: 20074002: подпрограммы BIO: FILE_CTRL: система Ошибка lib: 140DC002: подпрограммы SSL: SSL_CTX_use_certificate_chain_file: системная библиотека) nginx: файл конфигурации /etc/nginx/nginx.conf не пройден

Я на 100% уверен, что файл находится в этом месте, но Nginx, похоже, считает, что его там нет. Я слил domain.crtи intermediate.crtвручную в таком порядке. Я чесал голову над этим весь день. Я надеюсь, что кто-то видел эту ошибку и найдет решение. (И примечание, что при вставке расположение файла отображается только один раз, а не после «нет такого файла или каталога»).

tgoza
источник
3
path/to/cert.pemэто определенно недопустимое местоположение.
Майкл Хэмптон
Вы правы, предполагая, что это не фактический путь. Однако я мог бы легко сделать это действительной частью локации. Но в любом случае я не могу предоставить вам подробности из-за компании, для которой это делается. Я должен пропустить имя пользователя.
Тгоза

Ответы:

15

Вы уверены, что пользователь 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 это делает), но вышеуказанные настройки должны работать нормально.

Джим В.
источник
Я дважды проверил путь, и он действительно содержит /в начале, поэтому я изменил вопрос, чтобы отразить это. Файл находится в /home/user/subdirsи все права доступа к файлам и каталогам в нем принадлежат user.www-data (username.group name) и 775 set. И я думаю, что nginx имеет доступ ко всему, что принадлежит www-данным, хотя я могу ошибаться.
Тгоза
Всегда простые ошибки, которые требуют вечности, чтобы понять :) Рад, что вы получили это сработало.
Джим В.
как это выглядело точно? У меня есть мой, $root/keys/так что моя линия сертификата выглядит так ssl_certificate keys/cert.pem... они должны быть в корне?
яркая звезда
Использование абсолютных путей сделало свое дело.
яркая звезда
Я использовал docker-контейнер и решал эту проблему каждый раз, когда создавал контейнер заново. добавив chmod -R 600 /etc/nginx/sslв мою точку входа решить проблему спасибо
Дмитрий Коприва
3

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

Я запускаю 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

Иногда банальные вещи трудно увидеть. Надеюсь, это поможет.

бизи
источник
2

Возможный сценарий:

иногда может случиться так, что при настройке файлов 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;
    }

}
ivanleoncz
источник
-1

Я была такая же проблема. Мне пришлось изменить файлы / etc / nginx / sites-enabled / default & default.save, которые автоматически добавляли имя моего сайта без имени .com после него во время процесса установки, что было проблемой в моем случае . Короче говоря, эти две строки нужно было изменить в моем / etc / nginx / sites-enabled / default. Обратите внимание, что этот файл отображается с ярлыком в моей файловой системе, но я смог щелкнуть файл правой кнопкой мыши и отредактировать его с помощью параметра «Редактировать / Внутренний редактор».

HTTPS - запросы прокси к локальному Node.js ap # HTTPS - запросы прокси к локальному приложению Node.js: server {listen 443; имя_сервера 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 не были проблемой. Рок на Devs.

user3777549
источник