Очень похоже на этот вопрос но решения там не решили мою проблему.
Я пытаюсь изменить порт прокси 8443 на порт 4000 с помощью самоподписанного сертификата. Я создал свой сертификат вот так
openssl req -newkey rsa:2048 -sha256 -nodes -keyout certificate.key -x509 -days 365 -out certificate.pem
И я добавил серверный блок в свою конфигурацию nginx:
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 пометил файл как небезопасный, например unconfined_u
следовательно, запрещая доступ к нему независимо от прав доступа к файлу. Ярлыки для файла можно проверить, запустив ls -Z
.
Решение - изменить метку (также известную как контекст selinux) файла на то, что nginx разрешил открывать:
chcon -t httpd_config_t /path/to/file
Очень строгое соглашение для сервисов - хранить их настройки и файлы конфигурации в /etc/
а не в вашем домашнем каталоге.
Во-вторых, первое, что нужно исследовать в fopen ... permission denied
ошибка типа действительно являются разрешениями файловой системы для обоих файл и полный путь к каталогу поскольку они применяются к любому пользователю, от имени которого работает nginx.
(Домашние каталоги пользователей обычно закрыты для других пользователей ...)
Использовать Namei чтобы отобразить разрешения полного пути:
namei -mov /home/user/certificate.pem
Если нормальные разрешения файловой системы верны, то исследуйте, например, средства управления доступом SELinux, как описано в вопросах и ответах, на которые вы ссылаетесь.