`

【转】【原创】Apache 在更改DocumentRoot,或新增虚拟目录之后出现403错误的解决方法汇总详解(Linux)

 
阅读更多

【原创】Apache 在更改DocumentRoot,或新增虚拟目录之后出现403错误的解决方法汇总详解(Linux)

【一】关于本文

 

  1. 本文讲述在Linux系统下编译安装Apache之后,自行更改DocumentRoot目录指向后,站点出现403错误,浏览器中显示:Forbidden You don't have permission to access / on this server.

 

  2. 或者设置虚拟目录后的403错误。

 

  3. Apache的httpd服务已经成功启动,一切看似正常,却显示无权限的问题

 

  4. 查看错误日志,其中出现access to / denied (filesystem path '/usr/local/site/test') because search permissions are missing on a component of the path条目

 

  5. 设置虚拟目录后,错误日志出现:client denied by server configuration: /usr/local/folder

 

  6. 本文采用系统:Linux Red Hat Enterprise Linux 6(VMware); Apache版本:2.2.23

 

  7. Apache安装目录:/usr/local/apache

 

 

【二】错误汇总

 

  1. 首先,已经更改httpd.conf配置文件中的DocumentRoot为"/usr/local/site/test",site目录和test目录使用mkdir建立完成,并在test目录下建立index.html,这时,应该查看httpd.conf中如下一段内容:

 

<Directory "/usr/local/apache/htdocs">                       
    #                                        
    # Possible values for the Options directive are "None","All",          
    # or any combination of:                            
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews   
    #                                        
    # Note that "MultiViews" must be named *explicitly* --- "Options All"      
    # doesn't give it to you.                            
    #                                        
    # The Options directive is both complicated and important.  Please see     
    # http://httpd.apache.org/docs/2.2/mod/core.html#options            
    # for more information.                             
    #                                        
    Options FollowSymLinks                             

    #                                        
    # AllowOverride controls what directives may be placed in .htaccess files.   
    # It can be "All", "None", or any combination of the keywords:         
    #   Options FileInfo AuthConfig Limit                      
    #                                        
    AllowOverride all                                

    #                                       
    # Controls who can get stuff from this server.                  
    #                                       

#   onlineoffline tag - don't remove                        
    Order Deny,Allow                                
    Deny from all                                  
    Allow from 127.0.0.1                               

</Directory>                                     

 

在该段内容中,<Directory "/usr/local/apache/htdocs">的目录要更改成与DocumentRoot相一致,因为这段direcotory是apache对该目录的访问权限设定,只有设置正确的目录,DocumentRoot才会生效;

(这里不一定需要改,一般是直接更改httpd-vhosts.conf的配置,不直接在httpd.conf改

 

  2. 同样是在httpd.conf中,在第一条所示片段之前,有这样一段:

 

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

 

网上有许多文章介绍说,将它之间Deny from all修改为Allow from all,这是相当不负责任的说法,如果你这么做了,更对不起自己,这是禁止apache对根目录“/”以下所有内容禁止访问的设定,也是网站安全设置中最基本的设置,因为有第一条的片段在这段之后,只开通对应网站根目录的权限就可以了,如果将整个服务器的根目录都开放,一但有人试图上传一段可执行代码在不应该出现的目录里,后果不堪设想....

 

  3. 如果做到这一步,你的apache还是很顽固地403、403,那么,你就应该考虑网站目录的权限问题了,首先是目录的基本权限,apache要求目录具有执行权限,也就是x,而其中要注意的,你的目录树都应该拥有这些权限,目前我设置的是755,网上有文章说705就可以搞定,我还没具体测试,比如我的网站根目录是/usr/local/site/test,那么,你要保证/usr、/usr/local、/usr/local/site、/usr/local/site/test这四个层级的目录都是755权限,而我本人就只注意到最末的子目录test,却忽视了site层级,就悲催地弄了许久....

 

 

    chmod 755 /usr/local/site                            

    chmod 755 /usr/local/site/test                         

 

  小提示:上面这两段命令可以简化成(不过这样设置之后,文件夹中的所有文件都会是755权限,所以请在网站目录内还没有文件时进行此设置):

    chmod -R 755 /usr/local/site*                          

 

 

(补充:我个人分析,apache对DocumentRoot目录的访问应该是以“all”这个用户级别进行的,所以705也好,755也好,都是一个等级,如果你的网站是由PHP生成静态页面的话,还要拥有写权限,也就是说,“all"用户必须是7,当然,出于对服务器安全的角度,你不可以把apache这个用户加入到root组,因为有许多系统级文件对组的要求有所放宽,所以要对DocumentRoot这个目录中各个级别的目录分别进行权限设置,比如只有一部分目录的文件是需要生成的,那么就只将这部分目录设置为可写。)

 

 

  4. 如果你设置的是一个虚拟目录,那么你需要在httpd.conf中定义一个虚拟目录,而且像极了如下的片段:

 

Alias /folder "/usr/local/folder"                       

<Directory "/usr/local/folder">                         
    Options FollowSymLinks                            
    AllowOverride None                              
    Order deny,allow                               
    Deny from all                                 
    Allow from 127.0.0.1 192.168.1.1                       
</Directory>                                   

 

如果是这一种情况,而且你写得类似我上面的代码,三处folder都是一样一样的,那绝对会是403!怎么解决呢,就是把跟在Alias后面斜杠后面的那串改了,改成什么,不要和虚拟目录的文件夹同名就好,然后我就可以用改过后的虚拟目录访问了,当然,改文件夹也行,只要你不怕麻烦,只要Alias后面的虚拟目录定义字符(红色)和实际文件夹名(黑色)不相同就OK。

 

 

  5. 如果依然是403,那就是selinux在作怪了,于是,你可以把你的目录进行一下selinux权限设置

 

    chcon -R -t httpd_sys_content_t /usr/local/site                 

    chcon -R -t httpd_sys_content_t /usr/local/site/test               

 

不过,这一步大多不会发生,但以防万一,我还是写上来了。

 

 

 

【三】结语

 

  1. 在linux系统中,如果希望对某个子目录拥有特定权限,那么它的父目录也应该拥有该权限(根据遇到的问题猜测)

 

  2. 网上也有许多误导性质的文章,阅读和参考的时候,要拥有比较强的分辨能力,否则很容易“误入歧途”

 

  3. 要养成看错误日志的习惯,我本人就是没有这个习惯,才会白白地花掉小半天的时间来处理这样一个小小的错误。Apache的默认错误日志为:/usr/local/apache/logs/error_log

 

  4. 上网搜索时,不要一味使用一套关键词,而是多多更换可能的词汇来搜索,会有意外惊喜!

分享到:
评论

相关推荐

    apache虚拟目录和虚拟主机设置详解

    ### Apache虚拟目录和虚拟主机设置详解 #### 一、虚拟目录(Alias) 在Apache服务器配置中,虚拟目录(也称为别名)是一种重要的技术,它允许我们定义一个URL路径,并将其映射到服务器上的实际物理目录。这不仅提高...

    apache 虚拟目录配置文件

    其中,虚拟目录是Apache中一个非常实用的功能,它允许用户在不改变URL的情况下将不同的物理路径映射到同一个网站或应用程序的不同部分。 #### 二、Apache虚拟目录配置原理 Apache通过配置文件`httpd.conf`来管理其...

    apache配置虚拟目录

    ### Apache配置虚拟目录详解 #### 一、Apache配置文件概览 Apache服务器的配置主要通过一系列的配置文件来实现。不同操作系统中Apache的配置文件结构可能会有所不同。在Ubuntu Linux系统中,Apache 2的配置文件结构...

    快捷配置apache虚拟目录和HOSTS文件

    配置虚拟目录通常涉及修改Apache的配置文件httpd.conf或通过创建额外的vhost(虚拟主机)配置文件。 以下是配置Apache虚拟目录的基本步骤: 1. **打开配置文件**:找到Apache的配置文件,通常是`/etc/httpd/conf/...

    linux下apache虚拟主机的配置方法

    在Linux环境下配置Apache虚拟主机是一项关键的服务器管理技能,它允许在同一台物理服务器上运行多个独立的网站,每个网站都拥有自己的域名、文档根目录、错误日志等配置。以下是对给定文件信息中提到的知识点进行的...

    apache documentroot指向htcdoc之外提示403错误的解决方法

    Apache服务器在运行过程中,如果将`DocumentRoot`设置为`htdocs`目录之外的路径,可能会遇到403 Forbidden错误,这通常是因为权限问题或者配置不当导致的。403 Forbidden错误意味着客户端有权限进行请求,但服务器...

    apache虚拟目录和伪静态的配置

    虚拟目录,也称为别名或符号链接,允许我们在一个Apache服务器上设置多个独立的网站或者目录,而这些目录并不实际位于服务器根目录下。这有助于组织和管理不同项目或用户的文件,同时减少主域名下的文件混乱。 配置...

    apache在mac上以及linux上安装存在的一些问题以及解决方法

    ### Apache在Mac与Linux平台上的安装及配置问题与解决方案 #### 概述 Apache作为一款广泛使用的Web服务器软件,在不同的操作系统环境下(如Mac与Linux)可能会遇到一系列的配置与使用问题。本文旨在针对Apache在...

    Linux中Apache的配置详解

    ### Linux中Apache的配置详解 #### 一、Apache概述与特点 Apache是一款广泛使用的Web服务器软件,它在Linux操作系统上非常流行。Apache以其强大的功能、稳定性以及灵活性而著称,适用于多种平台,并支持HTTP 1.1...

    Linux Apache服务器.doc

    在本文中,我们将深入探讨如何在Linux系统上部署和配置Apache服务器,包括设置虚拟目录、个人主页、实现基本认证、配置虚拟主机、构建LAMP架构以及搭建个人论坛。 一、安装Apache服务 首先,确保你的Linux系统已经...

    Linux apache服务器基于ip,端口,域名的虚拟地址配置.zip

    本教程将深入探讨如何在Linux Apache服务器上配置基于IP、端口和域名的虚拟主机,以便在一个服务器上托管多个独立的网站。通过这种方法,我们可以高效地利用服务器资源,同时管理多个不同的在线服务。 首先,我们...

    ubuntu下配置apache虚拟主机(原创)

    虚拟主机是指在一台物理服务器上运行多个独立的虚拟服务器,每个虚拟服务器可以有自己的域名、IP 地址和文档根目录。这种技术可以帮助我们更好地利用服务器资源,提高服务器的利用率。 首先,我们需要在 Ubuntu ...

    Linux apache环境多域名配置

    ### Linux Apache环境多域名配置详解 #### 一、前言 在互联网开发中,单一服务器部署多个项目并分别对应不同的域名是一种常见的需求。这不仅能够提高服务器资源的利用率,还能帮助开发者更好地组织和管理不同类型...

    Apache2.4.6在Linux中安装及配置自启动

    Apache的错误日志和访问日志通常分别存储在 `/var/log/httpd/error_log` 和 `/var/log/httpd/access_log`,通过查看这些日志文件,可以帮助诊断和解决问题。 关于Apache更深入的配置,可以参考提供的文件 "APACHE...

    linux-Apache

    ### Linux下Apache服务器详解 #### 一、Apache服务器概述 Apache服务器是一款开源的Web服务器软件,因其稳定性、安全性以及灵活性而被广泛应用于互联网世界。它能够处理大量的并发连接,支持多种编程语言,如PHP、...

    Apache配置多端口及Apache端口修改方法

    ### Apache配置多端口及Apache端口修改方法详解 在多服务器环境或单一服务器上运行多个站点时,正确配置Apache的端口变得至关重要。本文将深入解析如何在Apache中配置多端口,以及如何修改Apache的默认端口,确保您...

    Apache linux下部署

    ### Apache在Linux下的部署与配置 #### 一、Apache服务的安装 在Linux环境下部署Apache Web服务器是一项基础但重要的任务。本文将详细介绍如何在Linux系统上安装和配置Apache Web服务器。 1. **安装Apache服务** ...

    Linux下Apache服务器的搭建.pdf

    本文详细介绍了在 RedHat 9.0 操作系统中利用 Apache 软件搭建 Web 服务器的方法,包括 Apache 服务器的安装方法、Apache 服务器的基本配置方法及高级应用设置。 Apache 服务器的安装: 1. 在 RedHat 9.0 操作系统...

    Linux和Solaris建立Apache虚拟根环境

    【Apache虚拟根环境】在Linux和Solaris操作系统中设置Apache虚拟主机环境,主要是为了在一个Apache服务器上托管多个独立的网站,每个网站都有自己的根目录,仿佛它们各自在独立的服务器上运行。这样的设置有助于资源...

    本地机apache配置基于域名的虚拟主机

    在本教程中,我们将探讨如何在本地计算机上配置Apache以实现基于域名的虚拟主机,这对于开发多站点项目或者进行网站测试非常有用。 首先,我们需要了解什么是基于域名的虚拟主机。在一台物理服务器上,可以设置多个...

Global site tag (gtag.js) - Google Analytics