我在使用 CentOS 6.3 在 Apache 2.4 上设置 vhost 时遇到问题。
这个问题似乎已在该论坛上回答过几次了,但没有一个解决方案对我有用。
基本上,我设置了一个具有特定文档根目录的虚拟主机。当我尝试访问该站点时,我收到权限错误。但如果我使用不同的根目录,则不会出现问题。
更具体地说,如果我将根设置为 /volume1/web/xxx,则会由于 index.html 上的权限问题而出现 503。
但是如果我将其设置为 /volume1/web,index.html 就会毫无问题地出现。
细节:
- 我将volume1,web和xxx的权限设置为755。
- 我将 index.html 文件的权限设置为 777。
- 我将 index.html 文件复制到 /volume1/web 和 /volume1/web/xxx,以便它们具有相同权限的相同索引文件。
在 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>
这些行包含对遇到同样问题的其他人有用的所有建议。
当我在浏览器中输入 localhost 时得到的内容取决于文档根目录。
- 如果根目录是 /volume1/web,则会出现 index.html 页面。
如果根目录是 /volume1/web/xxx,那么我会收到 503 错误,并且 apache 错误日志包含以下行:
[2012 年 7 月 19 日星期四 17:17:52] [错误] [客户端 ::1] (13)权限被拒绝:访问 /index.html 被拒绝
我还尝试将 index.php 文件添加到目录中。然后我收到了 php 文件和 html 文件的权限被拒绝的消息。
我还尝试在目录和文件上将用户:组设置为 apache:apache。但这没有帮助。
我已经尽一切可能去修复权限,但无济于事。
有人知道这里发生了什么事吗?
谢谢。
答案1
看来您已经在标准文件系统层次结构之外创建了一个新目录来保存您的 Web 文档。
当您执行此操作时,SELinux 不知道您的自定义目录结构,也不知道 Apache (httpd) 应该有权访问它。/var/log/audit/audit.log
在这种情况下,您将看到显示拒绝的消息。
要真正解决这个问题,你需要告诉 SELinux,Apache 可以访问该目录。使用语义管理上下文命令:
semanage fcontext -a -t httpd_sys_content_t "/volume1/web(/.*)?"
模式匹配是通过正则表达式完成的,因此它将匹配/volume1/web
其下方的所有内容。它使用正则表达式这一事实也意味着您需要像上面所示那样引用它。
然后重新标记文件:
restorecon -r -v /volume1/web
SELinux 现在将允许 Apache 访问 中的文件/volume1/web
。
答案2
我会把责任归咎于 SELinux。通过运行setenforce 0
并重试来验证。
答案3
- 禁用 SELINUX 并重新启动
SELINUX=已禁用
SELINUXTYPE=目标
#
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 ;
} ;
重启;