我在使用CentOS 6.3在Apache 2.4上设置虚拟主机时遇到问题。
这个问题似乎已经在这个论坛上被回答了好几次,但是没有一个解决scheme适用于我。
基本上,我build立了一个具有特定文档根目录的虚拟主机。 当我尝试访问该网站时,我收到了一个权限错误。 但是如果我使用不同的根,我没有问题。
更具体地说,如果我将根设置为/ volume1 / web / xxx,则由于index.html上的权限问题而得到503。
但是,如果我将它设置为/ volume1 / web,index.html出现没有问题。
细节:
在httpd.conf中,我设置了VirtualHost选项,以便通过更改2个注释标记来轻松切换文档根目录
我在conf文件中有以下几行:
NameVirtualHost *:80 <VirtualHost *:80> ServerName localhost #DocumentRoot /volume1/web DocumentRoot /volume1/web/xxx #<Directory /volume1/web> <Directory /volume1/web/xxx> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order Allow,Deny Allow from all </Directory> ErrorLog logs/localhost-error_log CustomLog logs/localhost-access_log common </VirtualHost>
这些行包含所有的build议,为同样的问题的其他人工作。
我在浏览器中input本地主机时得到的内容取决于文档根目录。
如果root是/ volume1 / web / xxx,那么我得到一个503错误,并且apache错误日志有这样的一行:
[Thu Jul 19 17:17:52 2012] [error] [client :: 1](13)Permission denied:access to /index.html denied
我也尝试添加一个index.php文件到目录。 然后,我得到了许可拒绝消息的PHP文件和HTML文件。
我也尝试将用户:组设置为目录和文件上的apache:apache。 这没有帮助。
我已经尽了我所能想到的来修复这些权限,但都无济于事。
有没有人有关于这里发生的事情的想法?
谢谢。
看起来您已经在标准文件系统层次结构之外创build了一个新目录来保存您的Web文档。
当你这样做的时候,SELinux并不知道你的自定义目录结构,也不知道Apache(httpd)应该可以访问它。 在这种情况下,您将在/var/log/audit/audit.log
看到显示拒绝的邮件。
要真正解决这个问题,你需要告诉SELinux Apache可以访问目录。 使用semanage fcontext命令执行此操作:
semanage fcontext -a -t httpd_sys_content_t "/volume1/web(/.*)?"
模式匹配是用正则expression式来完成的,所以这将匹配/volume1/web
和它下面的所有内容。 它使用正则expression式的事实也意味着你需要引用它如上所示。
然后重新标记这些文件:
restorecon -r -v /volume1/web
SELinux现在将允许Apache访问/volume1/web
文件。
我将指责SELinux的责任。 validation通过运行setenforce 0
并重新尝试。
grep ^ SELINUX / etc / sysconfig / selinux
{ T=/tmp/OLD.selinux.$RANDOM$RANDOM$$ ; cp -f /etc/sysconfig/selinux $T ; sed -e 's@^SELINUX=.*@SELINUX=disabled@' \ -e 's@^SELINUXTYPE=.*@SELINUXTYPE=targeted@' \ < $T > /etc/sysconfig/selinux ; } ;
xreboot;