在Apache 2.4中,为什么我会收到“您没有访问权限”的错误信息的调试

6
我想创建一个Linux/Ubuntu本地环境。
我已经安装了Apache 2.4.7(使用apt-get)。
我已经更改了我的/etc/hosts文件为以下内容:
127.0.0.1   example.dev
127.0.0.1   localhost
...

我还添加了一个名为"example.dev.conf"的文件到"/etc/apache2/sites-available"中,其内容如下:
<VirtualHost *:80>
    ServerName example.dev
    DocumentRoot "/home/yahya/path/to/projec"
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory "/home/yahya/path/to/project">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

但是当我访问example.dev时,出现以下消息:

403 禁止访问!您没有权限访问此服务器上的 / 目录。

我还根据此链接 Forbidden You don't have permission to access / on this serverError message "Forbidden You don't have permission to access / on this server" 编辑了 apache.conf 中的 <Directory /> 部分。
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order deny,allow
    Require all granted
</Directory>

我已经使用了a2ensite。但仍然不起作用。

这个文件夹的权限是什么?apache用户(通常是www-data,我想...)可以访问它吗?另外,您是否使用“a2ensite example.dev”启用了该站点? - daentech
1
但仍然无效!!!www-data 用户是否具有足够的权限在文件夹 /home/yahya/path/to/projec 中列出文件? - Cheery
1
@YahyaUddin 我们并不是在谈论你,而是关于正在运行Apache的用户。在该文件夹及其上层目录中执行ls -la 命令,检查 www-data 是否具有访问权限。 参考http://askubuntu.com/questions/43485/how-to-show-current-permissions-of-a-folder 等。 在Linux中做任何事情之前,您必须至少了解权限基础知识。否则,您可能会损坏整个系统。 - Cheery
1
如果你使用 ls -la /home/yahya/path/to/projec 列出 /home/yahya/path/to/projec 的权限,你将会看到该文件夹的所有者。用户 www-data 需要对此文件夹具备读取权限。 - daentech
1
@daentech 不仅具有读取权限,还具有列出文件的执行权限。 - Cheery
显示剩余4条评论
3个回答

3

即使解决方案可能不是这样,您首先应该检查Apache是否可以访问您的目录。这意味着您的文件夹应该对"其他人"拥有读取权限,或者学习如何在Linux上配置访问控制列表(ACL)。

$ ls -la /home/nek
# ...
drwxrwxr-x   6 nek  nek    4096 nov.  19 21:07 MyFolderOfDev

重要的部分是权限的最后一部分:"r-x"。如果你没有像这样的内容,使用以下命令:
$ chmod -R 755 MyFolderOfDev

我觉得您的原始配置很好。检查一下是否与另一个虚拟主机存在冲突。但是这是我的配置,它运行得非常好:

# Defining virtualhost
<VirtualHost *:80>
# This is not needed but seriously recommended
        ServerAdmin contact@moi.com
# This line is your host name (example.dev if you prefere)
        ServerName nekland
# You can add another server name using ServerAlias
    ServerAlias nekland.dev
# Path to your folder
    DocumentRoot /home/nek/Apache/SymfonyProject/web/
# Here are options neeeded to authorizations and I added some classical options
        <Directory /home/nek/Apache/SymfonyProject/web/>
                AllowOverride All
                Options -Indexes +FollowSymLinks +MultiViews
                Require all granted
        </Directory>
# For the error file, exactly like you did
        ErrorLog /var/log/apache2/nekland.err
        LogLevel warn
        CustomLog /var/log/apache2/nekland.log combined
# A little bonus that remove the server signature from http requests
        ServerSignature Off
</VirtualHost>

当然,在每次修改后不要忘记重新加载apache。
$ sudo service apache2 reload

如果所有方法都不奏效...检查你的日志!这是找出请求为何无法工作的更好方式。


非常感谢。我不知道Apache从另一个用户访问我的文件。非常感谢! - Yahya Uddin
实际上,在Ubuntu/Debian上,这是www-data用户,但在其他一些发行版上可能是http。 - Nek
仅更改我的目标文件夹的权限对我来说是不够的。我还必须更改父文件夹,即/home和/home/myusername。所有内容都在此处描述:http://askubuntu.com/a/507186/420084 - Kout

2
尽管原始问题已经解决,这里提供一些调试的更多想法:
  • 使用“tail -f /var/log/apache2/error.log”命令查看Apache是否尝试访问您的网站目录或“/var/www/”目录。如果是后者,则Apache2不会获取您的虚拟主机。
  • 列出虚拟主机:apache2ctl -S。您的虚拟主机在那里列出吗?
  • a2ensite your.page.com 命令是否有效或输出错误信息?
  • Apache 2.4 要求配置文件以 .conf 结尾存储在 /etc/apache2/sites-available 目录下。这在早期版本中不是必需的,并且可能会在升级后引起问题。

0

我刚刚花了几个小时研究这个问题,并得出了一些结论,这可能对某些人有所帮助。不配置“虚拟主机” - 我不知道那是什么。这只是一个标准的Apache设置。

操作系统:Linux Mint 18.3(基于Ubuntu Xenial)

服务器版本:Apache/2.4.18(Ubuntu)
服务器构建时间:2018-04-18T14:53:04

我似乎发现权限和所有权可能很重要,但在/etc/apache2/sites-available/000-default.conf文件中设置正确的内容也非常重要。

显然,这必须以root身份进行编辑。

我已经做出了以下更改:
1)DocumentRoot:更改如下:

# DocumentRoot /var/www/html (i.e. default commented out)
DocumentRoot "/media/mike/W10 D drive/My Documents/localhost"

并且
2)调整一个“目录”指令并添加一个新的:

<Directory />
            Options FollowSymLinks

# changed by me - NB this may or may not be important
#            AllowOverride None
             AllowOverride All 

</Directory>
# new "Directory" directive: appears to be crucial
<Directory /media/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Require all granted
</Directory>

注意:我发现一旦我将这些设置或任何其他内容提供给目录“/media”,那么包括上面配置的我的DocumentRoot(/media/mike/W10 D drive/My Documents/localhost)在内的所有位于/media下的内容都可以使用:403已解除!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接