Nginx
CentOs 上用於 ssl 配置的自簽名證書文件的 nginx 權限被拒絕
與這個問題非常相似,但那裡的解決方案並沒有解決我的問題。
我正在嘗試使用自簽名證書將埠 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 將文件標記為不安全的東西,
unconfined_u
因此無論文件的權限是什麼都拒絕訪問它。可以通過執行來檢查文件的標籤ls -Z
。解決方案是將文件的標籤(又名selinux context)更改為 nginx 允許打開的內容:
chcon -t httpd_config_t /path/to/file
服務的一個非常嚴格的約定是將它們的設置和配置文件放在你的主目錄中
/etc/
而不是在你的主目錄中。
fopen ... permission denied
其次,在類型錯誤中要調查的第一件事確實是文件和完整目錄路徑的文件系統權限,因為它們適用於 nginx 執行的任何使用者。(使用者主目錄通常對其他使用者關閉……)
使用namei顯示完整路徑的權限:
namei -mov /home/user/certificate.pem
如果正常的文件系統權限是正確的,則進一步調查例如 SELinux 訪問控制,如您連結到的問答中所述。