nginx文件訪問403問題


配置測試環境nginx時,增加了一個新的用戶用來上傳資源,所以想着就直接把靜態資源放在新用戶的home目錄。為此,還特地設置了相應目錄的所有用戶都可以讀取。

chmod 755 /home/tom/static/

奇怪的是配置后發現居然訪問資源出現403無權限訪問。
查了一下才知道原來nginx除了需要文件的讀權限外,還需要有文件的所有父目錄的可執行權限。
而新增的用戶的home目錄默認是700權限(環境是:CentOS 6),所以就403了。

有些文章很簡單粗暴的告訴設置use root,這應該不是正確的做法。
這篇總結的挺好,轉載於此:

轉載:nginx “403 Forbidden” 錯誤的原因及解決辦法

nginx 的 403 Forbidden errors 表示你在請求一個資源文件但是nginx不允許你查看。
403 Forbidden 只是一個HTTP狀態碼,像404,200一樣不是技術上的錯誤。
哪些場景需要返回403狀態碼的場景?

1.網站禁止特定的用戶訪問所有內容,例:網站屏蔽某個ip訪問。
2.訪問禁止目錄瀏覽的目錄,例:設置autoindex off后訪問目錄。
3.用戶訪問只能被內網訪問的文件。

以上幾種常見的需要返回 403 Forbidden 的場景。
由於服務器端的錯誤配置導致在不希望nginx返回403時返回403 Forbidden。

1.權限配置不正確

這個是nginx出現403 forbidden最常見的原因。
為了保證文件能正確執行,nginx既需要文件的讀權限,又需要文件所有父目錄的可執行權限。
例如,當訪問/usr/local/nginx/html/image.jpg時,nginx既需要image.jpg文件的可讀權限,也需要/, /usr,/usr/local,/usr/local/nginx,/usr/local/nginx/html的可以執行權限。

解決辦法: 設置所有父目錄為755權限,設置文件為644權限可以避免權限不正確。

2.目錄索引設置錯誤(index指令配置)

網站根目錄不包含index指令設置的文件。
例如,運行PHP的網站,通常像這樣配置index
index index.html index.htm index.php;
當訪問該網站的時,nginx 會按照 index.html,index.htm ,index.php 的先后順序在根目錄中查找文件。如果這三個文件都不存在,那么nginx就會返回403 Forbidden。
如果index中不定義 index.php ,nginx直接返回403 Forbidden而不會去檢查index.php是否存在。
同樣對於如果運行jsp, py時也需要添加index.jsp,index.py到目錄索引指令index中。

解決辦法: 添加首頁文件到index指令,常見的是index.php,index.jsp,index.jsp或者自定義首頁文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM