Apache2虚拟主机403禁止?

Posted

技术标签:

【中文标题】Apache2虚拟主机403禁止?【英文标题】:Apache2 virtualhost 403 forbidden? 【发布时间】:2013-07-12 06:19:52 【问题描述】:

我在桌面上运行 ubuntu 13.04 64bit,我安装了 Apache2、mysqlphp 等。

我想让我的网络根在/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 &amp;&amp; sudo a2ensite afflicto &amp;&amp; sudo service apache2 restart

我在/home/afflicto/public_html/test/ 中创建了index.phpindex.html 访问localhost/testlocalhost/test/index.html 等时,出现403 禁止错误。

我做错了什么?提前致谢。

更新 1 我已将 public_html 目录的所有者设置为 www-data。 还有sudo chmod -R +x public_html &amp;&amp; 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 的目录之后添加一个斜杠。

&lt;Directory /dir&gt; -> &lt;Directory /dir/&gt;

【讨论】:

【参考方案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禁止?的主要内容,如果未能解决你的问题,请参考以下文章

SVN (mod_dav) 403 禁止选项请求

HTTP 403 禁止

apache设置虚拟主机访问403禁止访问,为啥?

Ubuntu 10.04 上的虚拟主机。 - 访问禁止错误 403

Apache 403 禁止从所有 <Directory> 允许 - 虚拟主机 [重复]

403 禁止本地主机根 MAMP Pro v2.2