Apache2虚拟主机403禁止?
Posted
技术标签:
【中文标题】Apache2虚拟主机403禁止?【英文标题】:Apache2 virtualhost 403 forbidden? 【发布时间】:2013-07-12 06:19:52 【问题描述】:我在桌面上运行 ubuntu 13.04 64bit,我安装了 Apache2、mysql 和 php 等。
我想让我的网络根在/home/afflicto/public_html
而不是/var/www
。
所以我跟着这个指南走:http://www.maketecheasier.com/install-and-configure-apache-in-ubuntu/2011/03/09
(我从“配置不同的站点”开始做所有事情)因为我更喜欢这个解决方案。
这是我所做的:
已安装 Apache2、MySQL 等。
将/etc/apache2/sites-avaliable/default
复制到/etc/apache2/sites-available/afflicto
。然后编辑它,它现在看起来如下:
/etc/apache2/sites-available/afflicto
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/afflicto/public_html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/afflicto/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog $APACHE_LOG_DIR/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>
我做了sudo a2dissite default && sudo a2ensite afflicto && sudo service apache2 restart
我在/home/afflicto/public_html/test/
中创建了index.php
和index.html
访问localhost/test
或localhost/test/index.html
等时,出现403 禁止错误。
我做错了什么?提前致谢。
更新 1
我已将 public_html 目录的所有者设置为 www-data
。
还有sudo chmod -R +x public_html && sudo chmod -R 777 public_html
还是一样的 403 错误。
这是 apache 错误日志的输出:
[Sun Jul 14 06:10:32 2013] [error] [client 127.0.0.1] (13)Permission denied: access to / denied
[Sun Jul 14 06:10:32 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
【问题讨论】:
【参考方案1】:我为这个确切的问题苦苦挣扎了好几个小时,最终为我解决了这个问题的是在apache2.conf
的目录之后添加一个斜杠。
<Directory /dir>
-> <Directory /dir/>
【讨论】:
【参考方案2】:这是另一个旨在添加更简单解释的答案。假设您要提供一个名为“main”的文件,该文件位于/var/www/testwebsite
目录(已配置和启用的虚拟主机的 DocumentRoot)中。现在假设我们希望 Apache Web 服务器只能访问“主”文件而不是其他文件(例如 main 可能是我们 Web 应用程序的入口点),那么这意味着 Apache Web 服务器必须是那个文件。所以chown www-data:www-data /var/www/testwebsite/main
必须这样做。 (注意:www-data
既是用户的名称,也是 apache 在与其他文件交互时使用的组的名称(实际上,在 Ubuntu 以外的发行版上,这可能是一个不同的名称,在这种情况下,它可以简单地是在apache2.conf
中查找))。此外,如果“主”文件没有读取/执行的权限,则必须将其授予 apache 的用户和组:chmod 770 /var/www/testwebsite/main
。这给了作为文件“main”所有者的用户(www-data)和组(www-data)这些权限:读/写/执行(4 + 2 + 1 = 7),并且不给其他用户任何权限.现在单个文件(主文件)可以由 Apache 运行,而我们可以对 /var/www/testwebsite
目录中的所有其他文件进行任何其他严格级别的限制。
【讨论】:
【参考方案3】:这些选项对我有用:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
【讨论】:
【参考方案4】:原来我不仅要 chmod /home/afflicto/public_html
还要 /home/afflicto/
目录。
很奇怪。
【讨论】:
正确。 apache 进程必须有权访问路径中的每个目录。此外,apache 进程要求每个目录都具有世界访问权限,否则它不会将目录提供给(外部)世界。 一点也不奇怪。您声明的DocumentRoot
是/home/afflicto/public_html
,因此需要Apache 可以访问。【参考方案5】:
我遇到了这个问题。但是我不喜欢将我的主目录组更改为 www-data 的想法。这个问题可以简单地通过修改virtualHost的配置文件来解决。 只需配置目录标签以包含这些
<Directory "your directory here">
Order allow,deny
Allow from all
Require all granted
</Directory>
我猜Require all granted
是一个新功能;默认值为denied
。
查看此页面了解更多信息:http://httpd.apache.org/docs/current/mod/core.html#directory
【讨论】:
为我解决了这个问题!谢谢 显然 2.4 不需要订购和允许?Require all granted
是金子。非常感谢!
存在Require all granted
可能仍无法解决问题的情况。从用户目录提供文件的情况[可能已加密]。在这种情况下,您需要在用户目录上执行chmod +x
。我添加此评论是因为我遇到此错误“访问被拒绝,因为缺少搜索权限”;我家目录上的 chmod +x 提供了帮助。我不确定这是否非常安全,但我的主目录已加密。
就我而言,我还需要这样做 "chmod +x /home/(username)", andrewklau.com/…以上是关于Apache2虚拟主机403禁止?的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu 10.04 上的虚拟主机。 - 访问禁止错误 403