[踩雷紀錄] nginx: open() "..." failed(13:Permission denied) ...
2023, May 08
問題描述
這次的問題是發生在 nginx 安裝好並且正常啟動之後,要訪問頁面卻跑出 403,去查看一下 error.log 才看到下面的錯誤訊息,紀錄一下怎麼解決與排查
open() "/data/www/index.html" failed (13: Permission denied), client: 192.168.1.144, server: localhost, request: "GET / HTTP/1.1", host: "localhost"
訊息是寫沒有訪問檔案的權限,想想應該很直觀很好解決,下面來排查一下
解決方案
檔案不存在
第一先看看這個訪問的路徑存不存在,不存在的話當然會有問題,log 也有印出路徑在哪,檢查一下就好
使用者權限問題
權限問題分為兩個部分,一個是使用者是不是正確的,另一個是使用者是否有正確的權限
使用者身份問題可以看到 nginx.conf
應該前幾行就有寫了
user root;
通常我是直接寫 root,那 nginx 會嘗試用 root 執行,這樣檔案權限比較不會有問題
如果情況不允許用 root 執行,也可以檢查一下檔案權限,到路徑下執行下面指令修改權限
chmod -R 777 /data/www/index.html
暴力改成 777,改完重啟 nginx 應該就可以了
SELinux 的保護機制問題
如果上面方法都試過了,還是不行,那有可能是 SELinux 在作祟,可以先用下面指令看看 SELinux 的模式
getenforce
如果顯示 Enforcing
那 SELinux 就會根據設定的規則阻擋外部訪問資源,可以使用下面指令暫時關閉
setenforce 0
但下次重啟就會再次開啟,可以透過修改文件 /etc/selinux/config
SELINUX=disabled
改完檔案下次重啟就不會再開了
關於 SELinux 的細節可以參考鳥哥