天天看點

DocumentRoot must be a directory報錯

今日一台同僚的虛拟機安裝了httpd,然後修改DocumentRoot,但是無論怎麼修改都會啟動報錯DocumentRoot must be a directory。

檢視目錄權限,root的正常可以檢視到的,然後想,是否apache使用者進不了目錄(root使用者建立檔案夾)。修改檔案夾所屬使用者後還是一樣報錯,無法啟動httpd。

仔細想了下,linux系統貌似還有個SElinux安全機制,檢視一下狀态吧。

[root@localhost home]# getenforce

Enforcing

果然SElinux被開啟了,而且還是強制模式。目錄被設成了user_home_t類型,apache的程序沒有權限,無法通路。針對Apache的程序所使用的SELinux target policy規定了apache的程序隻能通路httpd_sys_content_t類型的目錄或檔案。是以隻要修改相關的權限就可以了。

解決辦法:

1.更改檔案夾權限

  1. chcon  -t httpd_sys_content_t /home/www/
  2. chcon  -t httpd_sys_content_t /home/www/html/

然後ls -Z檢視目錄權限

DocumentRoot must be a directory報錯

看,權限被改為httpd_sys_content_t了吧。這樣就可以啟動httpd了。

2.關閉SElinux

關閉SElinux的話需要重新開機系統,修改方法為:

vi /etc/selinux/config

修改SELINUX=disabled然後重新開機系統就關閉SElinux了。

想不重新開機系統的同學可以使用setenforce指令設定SElinux。

繼續閱讀