httpd 403

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

网上资料说不过,这一步大多不会发生。但我的问题确实是,可能跟系统有关,或者直接停掉selinux

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>

 

 

### Apache HTTPD 初始化配置 Apache HTTP Server (httpd) 是一种广泛使用的Web服务器软件。为了确保其正常运行,在安装完成后需进行一系列初始化配置。 #### 配置文件位置与结构 默认情况下,主要配置文件通常位于 `/etc/httpd/conf/httpd.conf` 或者 `/etc/apache2/apache2.conf` 中取决于操作系统版本[^1]。该文件包含了多个部分用于定义全局环境变量、模块加载列表以及虚拟主机设定等内容。 #### 启动参数说明 启动命令一般为 `apachectl start` 或者通过服务管理工具如 systemd 使用 `systemctl start httpd.service` 。可以传递额外选项给守护程序来改变行为模式: - `-f FILE`: 指定替代的主配置文件路径; - `-k command`: 发送特定信号到已存在的进程实例;例如重启(`restart`)或平滑重载配置(`graceful`); - `-t`: 测试当前配置的有效性而不实际开启监听端口. #### .htaccess 文件支持 对于需要更灵活控制目录级别的访问权限或者URL重写规则的应用场景来说,.htaccess 提供了一种便捷的方法。当 AllowOverride 设置为 All 时, 所有适用范围内的指令都可以被放置于这些分布式配置文件内生效[^2]. 然而需要注意的是频繁读取此类外部文件会带来性能开销因此建议尽可能集中化管理核心站点策略. #### 常见问题排查指南 ##### 错误日志分析 遇到无法解释的行为时首先要查看错误日志,默认存储在 `/var/log/httpd/error_log` 下面。这里记录着每次请求处理过程中产生的警告和异常信息有助于定位具体原因所在. ##### 权限不足导致失败 如果发现静态资源返回403 Forbidden响应码,则可能是由于文件系统层面的安全机制阻止了webserver对该部分内容的操作尝试赋予适当读取权利并重新测试连接情况即可解决这类简单情形下的障碍. ```bash chmod o+r /path/to/your/webroot/* chown apache:apache /path/to/your/webroot/* # 对应Linux平台上的用户名可能不同 ``` ##### 端口号冲突检测 有时即使正确设置了Listen语句仍然得不到预期效果这往往是因为其他应用程序占用了80(TCP)这样的标准HTTP通信通道。利用netstat/netcat/ss等网络诊断工具找出占用方进而调整相应服务的工作区间能有效规避干扰因素的影响: ```bash sudo netstat -plnt | grep :80 ss -tnlp '( sport = :80 )' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值