尽管允许访问目录(vhost配置),但Apache“服务器配置拒绝客户端”


38

在Ubuntu上的Apache中,我已经设置了虚拟主机,但是在浏览器中,我始终收到“禁止访问403”错误;日志显示“ 客户端被服务器配置拒绝:/ home / remix / ”。

在网上寻找解决方案时,我发现了许多有关目录访问的文章(全部允许,等等),但据我所知我已经这样做了。在httpd-vhosts.conf中,有以下代码:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/opt/lampp/htdocs/"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/home/remix/"
    ServerName testproject
    ServerAlias testproject
    <Directory "/home/remix/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

我还添加了

127.0.0.1    testproject

到/ etc / hosts文件。

另外,/ home / remix /文件夹包含一个index.html文件,并且在httpd.conf中启用了虚拟主机。

有什么我没看到的吗?

编辑:这是Apache error_log条目:

[Sat Aug 18 09:15:32.666938 2012] [authz_core:error] [pid 6587] 
[client 127.0.0.1:38873] AH01630: client denied by server configuration: /home/remix/

Apache的错误日志中有什么?
Shane Madden

啊,我以为我忘记了什么……我已将其添加到原始帖子中。
RemiX 2012年

您正在使用哪个版本的Apache?
Shane Madden

Apache / 2.4.2(Unix)
RemiX 2012年

Answers:


65

更改您的授权配置:

<Directory /home/remix/>
    #...
    Order allow,deny
    Allow from all
</Directory>

...到相同的Apache 2.4版本。

<Directory /home/remix/>
    #...
    Require all granted
</Directory>

查看升级概述文档,以获取有关您可能需要进行的其他更改的信息-并且请注意,您在Google(以及本网站)上找到的大多数配置示例和帮助均指的是2.2。


2
如果有时间,我会记录一个有关此的错误,因为httpd -t表示使用较旧的语法没有问题,httpd -S也没有。在我看来,配置检查器的全部意义在于它应该指出问题!...如果您有一个目录,则要引用此目录,它将无法正常工作,就这么简单。...竖起答案。
理查德T

4

检查目录的权限。我敢打赌,它设置为拒绝对除您之外的任何人的访问,例如:

$ ls -ld /home/remix
drwx------ 92 remix remix 4096 Aug 17 22:59 /home/remix

如果您看清楚drwx------,那就是这种情况。通过运行修复它:

chmod a+x /home/remix

我看到了:drwxrwxr-x 2 remix remix 4096 Aug 16 09:36 / home / remix。无论如何,我尝试了该命令,但没有效果。
RemiX 2012年

啊,不能全部赢。
迈克尔·汉普顿

3

确保正在运行httpd服务的用户有权访问此目录。


我不确定httpd的用户是谁或如何检查,但每个人都可以阅读(用户/组/其他)。
RemiX 2012年

检查httpd.conf以获取User参数。
cpt.Buggy

1
好的,它显示“ User nobody”和“ Group nogroup”。我尝试将其更改为“用户重新混音”(该文件夹的所有者),但即使那样也无济于事。
RemiX 2012年

1

“服务器配置拒绝客户端”是指Linux服务器本身禁止访问文件,而不是Apache。

如果通过更改权限/所有权/组成员身份来提供访问不能解决问题,则路由原因可能是SELinux禁止访问没有适当SE Linux上下文的任何文件夹,如“在Selinux下重新放置Apache DocumentRoot”中所述

  • 如果通过这样做暂时禁用SELinux,则setenforce 0使文件可访问
  • 而通过这样做重新启用SELinux setenforce 0会使文件再次不可访问

然后,无论文件权限如何,都可以确保SELinux禁止访问。


0

另一个可能导致用户出现此问题的简单(但棘手的问题)是用户目录不在/ home / *中,但在其他地方,例如/ nethome / *

提供的userdir.conf包含以下内容:(但Userdir:已禁用)

$ cat /etc/httpd/conf.d/userdir.conf 
<IfModule mod_userdir.c>
    UserDir enabled
    UserDir public_html
</IfModule>

<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

目录规范假定〜user == / home / user。只需更改或添加目录规范以了解用户主目录的实际位置。

很明显,但花了我一段时间才弄清楚!:-P DUH!

例如〜user == / nethome / user

<Directory "/nethome/*/public_html">
    AllowOverride All
    Options MultiViews Indexes Includes FollowSymLinks
    Require all granted
</Directory>

通常,请参阅该目录上的更多开放式授权。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.