【一】关于本文
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. 上网搜索时,不要一味使用一套关键词,而是多多更换可能的词汇来搜索,会有意外惊喜!
相关推荐
在windows和RH都碰到过,只要把主目录指到其他地方后就出现权限不够的403提示,郁闷了好久。
Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。 主站点的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/software/apache2" #你的apache软件安装的位置。其它指定的目录...
安装过apache之后打开httpd.conf文件会发现DocumentRoot默认设置的应该是apache安装目录中的htdocs文件夹。然后你的网页就可以放大这个htdocs文件夹中测试,例你在里面放了一个1.PHP,可以输入...
标准的apache虚拟域名配置 *:80> DocumentRoot "C:\AppServ\www\sss\web\dev" DirectoryIndex index.php ServerName www.shadowsite.com AllowOverride All Allow from All </VirtualHost>
1. DocumentRoot 服务器文件目录设置(这里文件夹与文件夹的分隔符不是WINDOWS里的“\”,而是“/”); 2. Listen ipaddress:portnumber Listen配置。默认是舰艇所有IP地址。可以指定在哪个IP地址的哪个端口、或者...
在网上查找到的关于修改Apache服务器根目录的资料,对比学习,再此记录 在安装 Apache 时,系统会给定一个缺省的文件根目录。 如果你觉得将网页存在这个缺省目录不方便,觉得应该另外设个目录作为 Apache 文件根目录...
分别是domain1.com, domain2.com, 修改/etc/httpd/conf/httpd.conf,在文件的最后加入: ServerName 58.130.17.168 NameVirtualHost 58.130.17.168 ServerName domain1.com DocumentRoot /var/...
241行: DocumentRoot 修改网站根目录地址 242行:网站根目录地址"> 358行:ScriptAlias /cgi-bin/ "apache目录+/cgi-bin/" 374行:<Directory "apache目录+/cgi-bin/"> 安装启动: 启动命令行管理员模式,然后...
在本地建立泛域名虚拟主机,可以修改Apache的安装目录下的conf/httpd.conf,如下: ServerName auciou.com ServerAlias *.auciou.com DocumentRoot F:/site/auciou 重启Apache,就可以在本地同时使用auciou.com...
再次按Next后,出现选择安装路径的界面,默认的路径比较长,pharmar把安装路径修改为:“D:\Program Files\Apache\”,继续安装,直到完成。 安装完毕,apache就自动启动,可以测试apache是否成功启动。在浏览器...
而在一个繁忙的网站上这一连接数量也许不能满足需要,特别是本文介绍的通过防火墙上的Apache反向代理允许外部用户访问多个内部Web服务器的情况,可以采用更改src/include/httpd.h文件的方法,具体步骤如下。...
1.apache配置文件中打开vhost的配置LoadModule vhost_alias_module modules/mod_vhost_alias.soInclude conf/extra/httpd-vhosts.conf2.extra目录中的httpd-vhosts.conf里面进行配置,有三个:第一个DocumentRoot,...
在apache http服务器上,设置虚拟主机(virtual host)的方法如下 打开apache 安装目录下面的conf/httpd.conf,加入下面两段 代码如下: <VirtualHost> ServerName fuwu.jb51.net ServerAlias fuwu.jb51.net fuwu.jb51...
php 虚拟主机的配置 httpd.conf 打开虚拟主机的配置文件... #设置虚拟主机的错误页面,欢迎页面 <Directory "C:/myenv/apache/htdocs/static2"> (2) 在hosts文件中,配置ip和主机的对应关系 127.0.0.1 www.hsp.com
在网上查了这个问题,感觉大多数都在答非所问,有的连虚拟主机和虚拟目录都分不清。 原因:phpstudy中httpd-conf文件是没有标明端口为80的,这就导致无论你怎么更改documentroot和directory权限都没有用, 使用...
先打开Apache的conf目录下的httpd.conf文件,在末尾添加如下代码:复制代码 代码如下: ServerName www.mydemo.com DocumentRoot “D:/mydemo”<Directory> Options FollowSymLinks IncludesNOEXEC Indexes ...
访问 http://www.abc.com/course/ ,实际访问的是:d:/... ... DocumentRoot d:/www/abc ServerName www.abc.com ##ServerAlias Alias /course d:/www/moodle Options FollowSymLinks AllowOverride None O
方法一: 首先打开apache中conf下的http.conf文件打开虚拟主机的注释:如下去掉第二行前面的#即可 # Virtual hosts # Include conf/extra/httpd-vhosts.conf 再打开conf目录下的extra目录中的httpd-vhosts.conf文件 在...
“Ln 228”,或者查找关键字“DocumentRoot”(也就是网站根目录),找到如下图所示地方,然后将""内的地址改成你的网站根目录,地址格式请照图上的写,主要是一般文件地址的“\”在Apache里要改成“/”。...