调试为啥我在 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 禁止!您无权访问此服务器上的 /。
我还根据以下链接的建议为 <Directory />
编辑了 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 中得到“你没有访问权限”的主要内容,如果未能解决你的问题,请参考以下文章
为啥我得到的是 Apache2 欢迎页面而不是 laravel 页面?
为啥我在使用 RestTemplate 获取数据时总是得到 403? [复制]
如何在 Apache 2.4 (Windows 7) 上为 PHP 5.6.14 配置 SQLite3?