Apache2安装后出现403 Forbidden 的原因 http://www.toplee.com/blog/93.html

June 1st, 2006 Michael Posted in Apache / Lighttpd, 技术交流 | 7,785 views

最 新的apache2.2提供和不少新模块的支持,也在性能和安全上有改进,也就造成一些新的机制和概念需要我们不断去摸索和熟悉,前一阵就遇到了安装好 apache2并配置好httpd.conf后,无论访问什么路径都出现 403 forbidden的提示,折腾了半天才从官方的maillist文档里面找到答案。

出现这样的问题一般有两种可能性。

一种可能性是DocumentRoot选项的设置,如果在安装好apache2后修改了该选项,并且忘记了配置该新目录的访问权限就会出现这样的情况。比如apache2安装好后默认的参数如下

DocumentRoot /usr/local/www/data

<directory "/usr/local/www/data">
   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</directory>

我们常常会重新指定web文件存放的目录,比如设定
DocumentRoot /var/www
这时往往会忽略了对后面的Directory 项的修改,必须将里面的路径同时修改为 /var/www才行,否则将会访问所有目录都出现 403 forbidden错误。


另外一种可能性出现在我们配置了不同的VirtualHost,并且有某个VirtualHost的DocumentRoot不在全局的 DocumentRoot目录下,这时必须在全局种单独增加对该目录的Directory 项进行设置,否则该VirtualHost下的所有访问均会出现403 forbidden错误。

这个问题是因为Apache2对于权限和安全的更高要求,对分布在不同磁盘上的目录文件进行严格管理,我们进行web规划的时候必须注意这一点。


升级apache和glibc

这两天把Apache升级到了2.0.58-r2, glibc-2.4-r3, 遇到了一点麻烦。

升级Apache本是很简单的事,可这回顺便把配置文件httpd.conf也升级了,改用Gentoo定制的httpd.conf, 导致所有站点无法访问,access denied。在httpd.conf中添加如下行:
<Directory "/var/www">
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
由于我所有域名下的站点都在/var/www下,设置Allow from all允许该目录下的所有站点被访问,AllowOveride All设置允许.htaccess进行设置覆盖。

升级完glibc-2.4-r3后,blog站点不能被访问。log中显示加载模块blogxp.publisher时出错:
/usr/sbin/apache2: relocation error: /lib/libresolv.so.2: symbol __res_iclose, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
估计是glibc升级后某些文件不兼容所致,重新安装了mod_python解决了问题。

Linux下的好多软件是相互依赖的,比如mod_python要依赖于Apache和Python等,当升级了底层软件,上层软件很可能需要重新编译,否则可能出现不兼容问题。

davies 发表于 2006 年 09 月 4 日 |