非常类似于这个问题但是那里的解决方案并不能解决我的问题。
我正在尝试使用自签名证书将代理端口 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 用户。
答案1
此问题很可能是由于 selinux 将文件标记为不安全,因此unconfined_u
无论文件的权限如何都会拒绝访问。可以通过运行来检查文件的标签ls -Z
。
解决方案是更改标签(又名selinux 上下文)文件的内容,以便 nginx 允许打开:
chcon -t httpd_config_t /path/to/file
答案2
服务的一个非常强的惯例是将其设置和配置文件放在/etc/
您的主目录中而不是主目录中。
其次,在类型错误中首先要调查的fopen ... permission denied
是文件系统权限文件和完整目录路径因为它们适用于以任何用户身份运行 nginx。
(用户主目录通常对其他用户关闭......)
使用纳美显示完整路径的权限:
namei -mov /home/user/certificate.pem
如果正常文件系统权限正确,则进一步调查例如 SELinux 访问控制,如您链接到的问答中所述。