apache httpd服务器403 forbidden的问题

一、问题描述

在apache2的httpd配置中,很多情况都会出现403。

刚安装好httpd服务,当然是不会有403的问题了。主要是修改了一些配置后出现,问题描述如下:

  • 修改了DocumentRoot目录指向后,站点出现403错误。
  • 设置了虚拟主机目录也可能导致403。
  • apache的httpd服务成功启动,看起来都很正常,却没有权限访问
  • 日志出现: access to / denied (filesystem path '/srv/lxyproject/wsgi/django.wsgi') because search permissions are missing on a component of the path
  • 设置虚拟目录后,错误日志出现:client denied by server configuration: /srv/lxyproject/wsgi/django.wsgi

二、分析问题及方案

下面一步步解决问题时注意错误日志内容。ok,开始。

1、httpd.conf中目录配置文件

如果显示更改了DocumentRoot,比如改为 "/usr/local/site/test" 。site目录和test目录是通过使用mkdir建立的,然后在test目录下放一个index.html。这种情况应该查看httpd.conf中配置。

你的<Directory "/usr/local/site/test">一定要和DocumentRoot一致,因为这段Directory是apache对该目录访问权限的设置,只有设置正确的目录,DocumentRoot才会生效。

<Directory "/usr/local/site/test">
    #
    # 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.4/mod/core.html#options
    # for more information.
    #
    Options Indexes 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 None

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

2、目录访问权限

第一步配置正确还是出现403,检查目录配置<Directory "/usr/local/site/test">中是否有Deny from all。有则所有访问都会被拒绝,当然403了。

可以设置为Allow from all或者Require all granted来处理。

不要修改<Directory />根目录中Deny from all。

3、目录权限

如果至此还是403,可能是网站目录的权限问题。

apache要求目录具有执行权限,也就是x,要注意的是,你的目录树都应该拥有这些权限。

假如你的目录是/usr/local/site/test,那么要保证/usr,/usr/local,/usr/local/site,/usr/local/site/test这四个层级的目录都是755权限。

#chmod 755 /usr/local/site
#chmod 755 /usr/local/site/test

我犯过一个错就是只设置了最后一级目录权限,没有设置上级目录权限,导致403。

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、selinux的问题

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

今天我遇到的就是这个问题了。

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

网上资料说不过,这一步大多不会发生。但我的问题确实是,可能跟系统有关,具体原理还不是很懂。

6、wsgi的问题

我的虚拟主机配置为:

<VirtualHost *:80>

WSGIScriptAlias / /srv/lxyproject/wsgi/django.wsgi
Alias /static/ /srv/lxyproject/collectedstatic/

ServerName 10.1.101.31
#ServerName example.com
#ServerAlias www.example.com

<Directory /srv/lxyproject/collectedstatic>
  Options Indexes  FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Directory /srv/lxyproject/wsgi/>
    Allow from all
</Directory>
ErrorLog   /etc/httpd/logs/lxyproject.error.log
LogLevel warn
</VirtualHost>

我访问

log报错:

client denied by server configuration: /srv/lxyproject/wsgi/django.wsgi

解决办法:

修改<Directory /srv/lxyproject/wsgi/>中Allow from all为:Require all granted

这个问题是因为版本的原因,

我的httpd版本为:

[root@yl-web conf.d]# rpm -qa |grep httpd
httpd-devel-2.4.6-31.el7.centos.x86_64
httpd-tools-2.4.6-31.el7.centos.x86_64
httpd-2.4.6-31.el7.centos.x86_64

而2.3以下版本用Allow from all,2.3及以上版本为Require all granted。

<Directory /home/aettool/aet/apache>
  <IfVersion < 2.3 >
   Order allow,deny
   Allow from all
  </IfVersion>
  <IfVersion >= 2.3>
   Require all granted
  </IfVersion>
</Directory>

 参考:http://stackoverflow.com/questions/17766595/403-forbidden-error-with-django-and-mod-wsgi

 

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4685999.html 有问题欢迎与我讨论,共同进步。

 

时间: 2024-12-20 20:52:13

apache httpd服务器403 forbidden的问题的相关文章

Apache网站显示403 Forbidden错误

安装Apache,装完刚测试可以:配置了下php的php.in文件再次localhost打开发现错误:HTTP 错误 403 - 禁止访问,即403 Forbidden:You don't have permission to access / on this server.权限又不够了? 马上打开apache的配置文件httpd.conf,逐行检查.  代码如下 复制代码 <Directory /> Options FollowSymLinks AllowOverride None Orde

Apache httpd 目录列表禁用配置(options indexes)

Apache httpd服务器在缺省的情况下,开启了基于目录列表的访问,这是一个存在安全隐患的问题,因此可以关闭这个功能.在Apache 2.4的版本中,不在支持使用-indexes来配置,需要注释该功能.本文对此给出演示,供大家参考. 一.缺省情况目录列表可查看示例 当前环境 [root@centos7-web ~]# more /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@centos7-web ~]# apac

Linux下Tomcat与Apache Web服务器整合

apache|web|web服务|web服务器 1.引言      基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以TCP/IP协议为基础.以Web为核心的企业内部网,用户通过低成本.简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据.浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系:同时,Web信息动态的.交互式的发布方式从根本上

Linux下Tomcat与Apache Web服务器的整合

1.引言基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以TCP/IP协议为基础.以Web为核心的企业内部网,用户通过低成本.简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据.浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系:同时,Web信息动态的.交互式的发布方式从根本上改变了企业的服务质量,增加了企业的商业机会.在许多用户看来,

Apache主服务器设置

Apache服务器需要各种设置,以定义自己使用各种参数以提供Web服务.对于使用虚拟主机的情况,除了在虚拟主机的定义项中覆盖的设置之外(有的设置必须重新定义),这里的设置也是虚拟主机的缺省设置. Port 80 Port定义了Standalone模式下httpd守护进程使用的端口,标准端口是80.这个选项只对于以独立方式启动的服务器才有效,对于以inetd方式启动的服务器则在inetd.conf中定义使用哪个端口. 在Unix下使用80端口需要root权限,一些管理员为了安全的原因,认为 htt

Nginx服务器中403 forbidden的错误如何解决

  nginx 的 403 Forbidden errors 表示你在请求一个资源文件但是nginx不允许你查看. 403 Forbidden 只是一个HTTP状态码,像404,200一样不是技术上的错误. 哪些场景需要返回403状态码的场景? 1.网站禁止特定的用户访问所有内容,例:网站屏蔽某个ip访问. 2.访问禁止目录浏览的目录,例:设置autoindex off后访问目录. 3.用户访问只能被内网访问的文件. 以上几种常见的需要返回 403 Forbidden 的场景. 由于服务器端的错

Apache httpd 2.4 访问控制

Apache访问控制可以由几个不同的模块完成.其中最重要的是mod_authz_core和mod_authz_host.Apache使用Require指令进行授权来确保用户被允许或拒绝访问资源.其中mod_authz_host模块可以使用ip,host,forward-dns和local扩展授权类型.其他授权类型也可以使用,但可能需要加载额外的授权模块.这些授权提供程序会影响哪些主机可以访问服务器的某个区域.访问可以通过主机名,IP地址或IP地址范围进行控制. 一.基于主机的访问控制 由mod_

Linux下配置Apache httpd

httpd是Apache超文本传输协议(HTTP)服务器的主程序.它被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池对外提供服务.httpd支持基于 虚拟主机,以及基于HOST.IP.PORT实现虚拟主机,反向代理,负载均衡,路径别名,用户认证,basic,支持第三方模块等众多特性.本文主要描述了Linux下httpd(2.2版本)的相关基本配置. 1.配置文件概述 配置文件,主要分为3个部分: # grep "Section" /etc/httpd/conf/h

禁止IP访问网站的多种方法分享(linux,php,nginx,apache)_服务器其它

PHP禁止某个IP或IP段访问 废话不多说,客官请看: <? //禁止某个IP $banned_ip = array ( "127.0.0.1", //"119.6.20.66", "192.168.1.4" ); if ( in_array( getenv("REMOTE_ADDR"), $banned_ip ) ) { die ("您的IP禁止访问!"); } //禁止某个IP段 $ban_ran