Очень похоже на этот вопрос , но решения там не решили мою проблему.
Я пытаюсь перевернуть порт прокси 8443 на порт 4000 с самоподписанным сертификат. Я сгенерировал свой сертификат следующим образом
openssl req -newkey rsa: 2048 -sha256 -nodes -keyout certificate.key -x509 -days 365 -out certificate.pem
И я добавил серверный блок в свой nginx conf:
server {
listen 8443 ssl;
server_name www.mydomain.io;
ssl_certificate /home/user/certificate.pem;
ssl_certificate_key /home/user/certificate.key;
location / {
proxy_pass http://localhost:4000/;
}
}
Но теперь, когда я пытаюсь запустить nginx с помощью systemctl start nginx
, я получаю следующую ошибку:
Sep 10 06:38:52 Elixir systemd[1]: Starting The nginx HTTP and reverse proxy server...
Sep 10 06:38:52 Elixir nginx[25347]: nginx: [emerg] BIO_new_file("/home/user/certificate.pem") failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen('/home/user/certificate.pem','r') error:2006D002:BIO routines:BIO_new_file:system lib)
Sep 10 06:38:52 Elixir nginx[25347]: nginx: configuration file /etc/nginx/nginx.conf test failed
Изменить: файлы имеют права доступа 777, но не принадлежат пользователю nginx.
Эта проблема, скорее всего, возникла из-за того, что selinux пометил файл как что-то небезопасное, например unlimited_u
поэтому запрещает доступ к нему независимо от прав доступа к файлу. Ярлыки для файла можно проверить, запустив ls -Z
.
Решение состоит в том, чтобы изменить метку (также известную как selinux context ) файла на то, что разрешено nginx. open:
chcon -t httpd_config_t /path/to/file
Очень строгое соглашение для служб - иметь их настройки и файлы конфигурации в / etc /
, а не в вашем домашнем каталоге.
Во-вторых, первое, что нужно исследовать. в ошибке типа fopen ... permission denied
действительно являются разрешениями файловой системы для файла и полного пути к каталогу , поскольку они применяются к любому пользователю, запускаемому nginx в виде.
(Домашние каталоги пользователей обычно закрыты для других пользователей ...)
Используйте namei , чтобы отобразить разрешения полного пути:
namei -mov /home/user/certificate.pem
Если обычные разрешения файловой системы правильные, то более подробно изучить, например, средства управления доступом SELinux, как описано в вопросах и ответах, на которые вы ссылаетесь.