在Linux上開發一個Web項目,使用nginx作為Web服務器。在nginx的配置文件中添加一個server
,root
路徑寫的是放在home目錄中的項目目錄的路徑。打開瀏覽器訪問,提示錯誤:403 Forbidden。
查看nginx的錯誤日志/var/log/nginx/error.log
,關鍵信息:
2021/09/03 16:21:00 [error] 18755#18755: *1 "/home/youshilife/project/index.html" is forbidden (13: Permission denied), client: 127.0.0.1, server: project.test, request: "GET / HTTP/1.1", host: "project.test"
可見,是訪問文件/home/youshilife/project/index.html
時權限不足導致的問題。
經檢查,發現問題的根源出在home目錄的權限設置上。/home/
下每個用戶的家目錄權限為700
,即讓每個用戶的家目錄僅允許被該用戶自己訪問。nginx運行時使用的用戶顯然不是youshilife
,當然就沒有權限訪問到里面的文件。
幾個可行的解決方案:
- 做
chmod o+x /home/<用戶名>
,即允許其他用戶訪問自己home目錄中的文件列表。
多用戶場景下一般不要這么做,因為有安全風險。 - 將項目目錄直接放在其他nginx可訪問的目錄中(如
/srv/
、/var/www/
)。
開發環境中可以將項目目錄的所屬用戶設置為自己,以便修改。
另外,我嘗試了將home目錄中的項目目錄做軟鏈接到其他可訪問的目錄中(如/srv/
),結果發現不行,這是因為軟鏈接相當於一個指針,實際訪問時還是按原始路徑訪問,所以仍然受原始路徑的權限設置影響。而對於目錄,Linux不允許做硬鏈接。