nginx 的 403 Forbidden errors 表示你在請求一個資源檔但是nginx不允許你查看。
403 Forbidden 只是一個HTTP狀態代碼,像404,200一樣不是技術上的錯誤。
哪些情境需要返回403狀態代碼的情境?
網站禁止特定的使用者訪問所有內容,例:網站屏蔽某個ip訪問。
2.訪問禁止瀏覽目錄的目錄,例:設定autoindex off後訪問目錄。
3.使用者訪問只能被內網訪問的檔案。
以上幾種常見的需要返回 403 Forbidden 的情境。
由於伺服器端的錯誤配置導致在不希望nginx返回403時返回403 Forbidden。
許可權配置不正確
這個是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或者自訂首頁檔案。
引起Nginx 403 forbidden有二種原因,一是缺少索引檔案,二許可權問題。今天又遇到 了,順便總結一下。
1,缺少index.html或者index.PHP檔案
server { listen 80; server_name localhost; index index.php index.html; root /home/zhangy/www;
如果在/home/zhang/www下面沒有index.php,index.html的時候,直接存取網域名稱,找不到檔案,會報403 forbidden。例如:你訪問www.test.com而這個網域名稱,對應的root指定的索引檔案不存在。
2,許可權問題
因為許可權問題引起的403,個人覺得比較難尋找,因為一時想不起
server { listen 80; server_name localhost; index index.php index.html; root /home/zhangy/www;
我把web目錄放在使用者的所屬目錄下面,nginx的啟動使用者預設是nginx的,所以對目錄根本沒有讀的許可權,這樣就會報403錯誤了。這個時候,把web目錄的許可權改大,或者是把nginx的啟動使用者改成目錄的所屬使用者,重起一下就能解決。