调试为啥我在 Apache 2.4 中得到“你没有访问权限”

Posted

技术标签:

【中文标题】调试为啥我在 Apache 2.4 中得到“你没有访问权限”【英文标题】:Debugging why I get "You don't have permission to access" in Apache 2.4调试为什么我在 Apache 2.4 中得到“你没有访问权限” 【发布时间】:2015-01-25 10:24:34 【问题描述】:

我正在尝试在 Linux/Ubuntu 中创建本地环境。

我已经安装了 Apache 2.4.7(使用 apt-get)。

我已将我的 /etc/hosts 更改为:

127.0.0.1   example.dev
127.0.0.1   localhost
...

我还在“/etc/apache2/sites-available”中添加了一个文件“example.dev.conf”,如下所示:

<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 禁止!您无权访问此服务器上的 /。

我还根据以下链接的建议为 &lt;Directory /&gt; 编辑了 apache.conf 部分:Forbidden You don't have permission to access / on this server 和 Error message "Forbidden You don't have permission to access / on this server"

来自:

<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 启用了该网站 But still does not work!!! www-data 是否有足够的权限列出文件夹/home/yahya/path/to/projec 中的文件? @YahyaUddin 我们不是在谈论你,而是在谈论运行 Apache 的用户。 ls -la 在文件夹及以上,以检查 www-data 是否有权访问它。 askubuntu.com/questions/43485/… 等等。在 Linux 中做任何事情之前,您至少必须了解有关权限的基础知识。否则你只会损坏整个系统。 如果您将/home/yahya/path/to/projec 的权限与ls -la /home/yahya/path/to/projec 一起列出,您将看到该文件夹​​的所有者。用户www-data 需要对该文件夹的读取权限。 @daentech 不仅可以读取,还可以执行列出文件的权限。 【参考方案1】:

即使解决方案可能不是这样,您也应该首先检查 apache 是否可以访问您的目录。这意味着您的文件夹应该具有“其他人”的阅读权限或学习如何在 linux 上配置 acls。

$ 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 从其他用户访问我的文件。非常感谢! 实际上是 ubuntu/debian 上的 www-data 用户,但在其他一些发行版上它可以是 http。 仅更改目标文件夹的权限对我来说还不够。我必须更改两个父文件夹,所以 /home 和 /home/myusername 也是如此。全部描述在这里:askubuntu.com/a/507186/420084【参考方案2】:

虽然原来的问题解决了,但这里还有一些调试思路:

tail -f /var/log/apache2/error.log 查看 apache 是否正在尝试使用您的站点或 /var/www/ 访问目录。在后一种情况下,apache2 不会获取您的虚拟主机。 列出虚拟主机:apache2ctl -S。您的虚拟主机是否列在那里? a2ensite your.page.com 是否工作或打印错误? apache 2.4 要求 /etc/apache2/sites-available 中的配置文件以 .conf 结尾。这不是早期版本的要求,升级后可能会导致问题。

【讨论】:

【参考方案3】:

我刚刚在这方面花了几个小时,得出了一些人可能感兴趣的结论。没有配置“虚拟主机”——我不知道那是什么。这只是一个标准的 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>

NB 我发现,一旦我将这些设置或任何它们提供给目录“/media”,/media 下的所有内容,包括我上面配置的 DocumentRoot(/media/mike/W10 D 驱动器/My Documents/localhost ),变得可用:403 消失了!

【讨论】:

以上是关于调试为啥我在 Apache 2.4 中得到“你没有访问权限”的主要内容,如果未能解决你的问题,请参考以下文章

隐藏目录检测到 apache 2.4

为啥我得到的是 Apache2 欢迎页面而不是 laravel 页面?

为啥我在使用 RestTemplate 获取数据时总是得到 403? [复制]

如何在 Apache 2.4 (Windows 7) 上为 PHP 5.6.14 配置 SQLite3?

为啥我把php+mysql+apache都安装好了,可是当我在打开默认目录的时候显示的是文件下载

为啥有些字典键在从调试器打印时有引号而另一些没有?