apache 403 forbid 解決方案

Apache服務器出現Forbidden 403錯誤提示的解決方法總結

在配置Linux的 Apache服務時,經常會遇到http403錯誤,我今天配置測試時也出現了,最後解決了,總結了一下。http 403錯誤是拒絕訪問的意思,有很多原因的。還有,這些問題在win平臺的Apache裏一樣會發生!我按照經驗總結的主要有以下4種原因!

本人測試的環境 是:Scientific Linux 5.3(與RHEL和CentOS百分百兼容!),其它版本的Linux應該通用,沒測試。

1. 訪問的文檔權限不夠。要755以上權限。解決方法:用命令chmod 755 /var/www/ 或其他相應目錄。
2. SELinux或防火牆的原因。解決方法:先關閉SELinux和讓防火牆通過WWW服務。
3. 虛擬主機配置錯誤。例如我遇到過一次的:
httpd.conf里加載了虛擬主機的配置文件:

代碼如下:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

而conf/extra/httpd-vhosts.conf並沒有配置好,而且虛擬主機功能暫時還沒有用,所以把Include conf/extra/httpd-vhosts.conf註釋掉,重啓apache後正常了。
解決方法:重新配置虛擬主機或暫時關閉。

4. DocumentRoot的設置。解決方法如下:

打開 apache的配置文件httpd.conf,找到這段代碼:

代碼如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

有時候由於配置了php後,這裏的“Deny from all”已經拒絕了一切連接。把該行改成“allow from all”,修改後的代碼如下,問題解決。

代碼如下:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>

以下是其它網友的補充:

部署apache服務Forbidden 403問題小結

很多朋友和學生都問過我同樣的問題 訪問網站Forbidden 403 什麼原因?一般頁面提示爲:

Forbidden
You don't have permission to access / on this server.

 

http錯誤代碼403:
403 Forbidden 資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置導致。

通常情況可能(但不限於此)的原因有:

原因1:apache配置文件中沒有對站點目錄的權限許可,這通常是在初始安裝apache後,更改了默認的apache站點目錄時所至(重要,常發生):

如將站點目錄更改爲:/var/blog,則在apache配置文件中如果不加下面的配置 就會返回403錯誤。

<Directory "/var/blog">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

提示:生產環境上面的配置還需修改,見下文,此處僅就本文的主題講解。

原因2:站點目錄下無首頁文件(index文件),而apache的配置又禁止了目錄瀏覽,就會提示403錯誤,配置如下(偶爾發生):

a.站點目錄下無首頁文件(index文件):
[root@http-server blog]# pwd
/var/blog
[root@http-server blog]# ll
total 12
drwxr-xr-x 2 root root 4096 Jun 4 22:11 oldboy
-rw-r--r-- 1 root root 0 Jun 4 22:11 oldboy.html
提示:上面列出來的就是站點目錄/var/blog目錄下沒有預設 首頁DirectoryIndex index.html

b.apache的配置禁止目錄瀏覽的三種配置
第一種配置:
<Directory "/var/blog">
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

第二種配置:
<Directory "/var/blog">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

第三種配置:
<Directory "/var/blog">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

提示:第二種原因朋友們偶爾會朋友,但遇到問題最多的還是第一種原因。
========================================================
以上配置的詳細說明:

原因3:還是Directory權限問題(不常發生)

如下文:拒絕10.0.0.0/24整段訪問。這樣被拒絕的主機訪問就會出現403錯誤
<Directory "/var/blog">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
#Allow from all
Deny from 10.0.0.0/24
<Directory "/var/blog">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
#Allow from all
Allow from 10.0.0.116
#Deny from 10.0.0.0/24
</Directory>

原因4:站點目錄權限問題(不常發生)。

站點目錄需要apache的用戶有訪問權限,否則就會報403錯誤。
[root@http-server var]# pwd
/var
[root@http-server var]# chown -R root.root blog/
[root@http-server var]# chmod 700 blog
[root@http-server var]# ll -d blog/
drwx------ 3 root root 4096 Jun 4 22:11 blog/

一種可能性是DocumentRoot選項的設置,如果在安裝好apache2後修改了該選項,並且忘記了配置該新目錄的訪問權限就會出現這樣的情況。

比如apache2安裝好後默認的參數如下:

  1. DocumentRoot /usr/local/www/data
  2. <directory "/usr/local/www/data">
  3. Options Indexes FollowSymLinks
  4. AllowOverride None
  5. Order allow,deny
  6. Allow from all
  7. </directory>

我們常常會重新指定web文件存放的目錄,比如設定DocumentRoot /var/www這時往往會忽略了對後面的Directory 項的修改,必須將裏面的路徑同時修改爲 /var/www才行,否則將會訪問所有目錄都出現 403 forbidden錯誤。

今天在公司電腦上安裝Apache,版本2.2.8,裝完剛測試可以;配置了下php的php.in文件再次localhost打開發現錯誤:HTTP 錯誤 403 - 禁止訪問,即403 Forbidden:You don't have permission to access / on this server.權限又不夠了?
馬上打開apache的配置文件httpd.conf,逐行檢查。在大約快一半的地方有以下這段代碼:

  1. <Directory />
  2. Options FollowSymLinks
  3. AllowOverride None
  4. Order deny,allow
  5. Deny from all
  6. </Directory>

發現了吧。

由於配置了php後,這裏的“Deny from all”已經拒絕了一切連接。把該行改成“allow from all”,修改後的代碼如下,問題解決。

  1. <Directory />
  2. Options FollowSymLinks
  3. AllowOverride None
  4. Order deny,allow
  5. allow from all
  6. </Directory>

另外一種可能性出現在我們配置了不同的VirtualHost,並且有某個VirtualHost的DocumentRoot不在全局的DocumentRoot目錄下,這時必須在全局種單獨增加對該目錄的Directory 項進行設置,否則該VirtualHost下的所有訪問均會出現403 forbidden錯誤。

這個問題是因爲Apache2對於權限和安全的更高要求,對分佈在不同磁盤上的目錄文件進行嚴格管理,我們進行web規劃的時候必須注意這一點。
試試下面的步驟:

  • 第一:看看是不是Directory配置錯了,好像一般不會是這個原因
  • 第二:看看User Group指定的用戶有沒有權限訪問那個目錄,否則用chown修改目錄的所有者
  • 第三:看看是不是seLinux搞得鬼,一般沒事把selinux停了再重啓linux,selinux的配置文件在/etc/selinux/config,改成disable
  • 第四:我把所有的都做了發現還是不行,那麼可能是apache是用root安裝的,把apache卸了用一個非root用戶重新安裝。

終極解決辦法:如果以上都不行的話!!!

Forbidden You don't have permission to access / ~ web on this server. Additionally, a 403 Forbidden error was encountered while trying to use an Error Document to handle the request.

Apache/2.0.54 (CentOS) Server at 127.0.0.1 Port 80

一般出現這個問題,直觀地會想到的目錄的存取權限問題,查了很久,調了很久也沒有解決問題。

其間曾想到是否Selinux的問題,進去看了一圈,沒有發現什麼要改的地方。(後來的事實證明,有時候直覺是很準的,能否找到答案,區別往往是:是否在直覺上走的更深入)。

問題的解決用Google以Apache 403搜了好一會,終於在一個博客裏看到,作者遇到和我完全相同的問題:Apache、目錄的配置都沒問題,但就是不能顯示頁面。

而解決方法恰恰就是修改Selinux對public_html的訪問控制。

用以下命令修改文件夾安全屬性

  1. chcon -R -t httpd_user_content_t public_html/

本文爲拋磚引玉 更多原因,期待你的答案。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章