由于開發需要,在本地用虛拟機配置了
LNMP
環境,使用的是
Centos 6.8
的yum安裝,安裝一切正常,但是使用預設的網站配置目錄,是在
/usr/share/nginx/html
這個目錄下。簡直是有點奇葩了。
于是乎,我先将預設的配置檔案copy了一份,修改root為
/data/www
,接着就在根目錄下建立了
/data/www
這個目錄準備放置新的網站檔案。
感覺一切都很ok的時候,重新開機運作發現,報錯了
403 forbidden
。這着實讓我很意外,預設的配置下,都是可以打開,為什麼換個目錄就不行了呢。
于是檢視nginx日志,路徑為
/var/log/nginx/error.log
。打開日志發現報錯
Permission denied
,詳細報錯如下:
open() "/data/www/1.txt" failed (13: Permission denied), client: 192.168.1.194, server: www.web1.com, request: "GET /1.txt HTTP/1.1", host: "www.web1.com"
這就很尴尬了,沒有權限?不可能啊。于是開始一個個排查錯誤。
注意:
引起
nginx 403 forbidden
通常是三種情況:
- 一是缺少索引檔案,
- 二是權限問題,
- 三是SELinux狀态。
很多人在排查錯誤的時候,前兩個步驟都知道,但是第三個真的很少有人知道,我也是找了半天才發現需要設定
SELinux
狀态。
那麼,我們看三步解決nginx報錯
403 forbidden (13: Permission denied)
的問題?
一、缺少
index.html
或者
index.php
檔案,就是配置檔案中
index index.html index.htm
這行中的指定的檔案。
server {
listen 80;
server_name localhost;
index index.php index.html;
root /data/www/;
}
如果在
/data/www/
下面沒有
index.php,index.html
的時候,直接檔案,會報
403 forbidden
。
二、權限問題,如果nginx沒有web目錄的操作權限,也會出現403錯誤。
解決辦法:修改web目錄的讀寫權限,或者是把nginx的啟動使用者改成目錄的所屬使用者,重新開機Nginx即可解決
chmod -R 777 /data
chmod -R 777 /data/www/
三、
SELinux
設定為開啟狀态(
enabled
)的原因。
3.1、檢視目前selinux的狀态。
/usr/sbin/sestatus
3.2、将
SELINUX=enforcing
修改為
SELINUX=disabled
狀态。
vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
3.3、重新開機生效。
reboot
。
reboot
我這裡出現錯誤的問題就是在第三步設定
SELinux
的問題上,折騰我好長時間。
簡單的三個步驟輕松的解決
Nginx
出現
403 forbidden (13: Permission denied)
報錯的問題。