好的,我之前已经设置了两个虚拟主机,它们都很酷。它们都包含简单的web项目,在浏览器中可以很好地使用http://project1
和http://project2
。
我用www.example.com project 3编辑了/etc/hosts文件127.0.0.1,还通过复制和粘贴project 2的先前条目并编辑文件路径更新了httpd-vhosts.conf文件。
我已经检查了所有的文件和文件夹权限(事实上我是从project 2复制并粘贴的),并简单地在index.php文件中放置了一条“hello world”消息。
访问http://project3
时收到403禁止权限拒绝消息
为什么会这样,我只是想知道我错过了什么步骤,因为一切似乎都设置正确。
9条答案
按热度按时间koaltpgm1#
检查:
此外,您可以查看error.log文件(通常位于
/var/log/apache2/error.log
),该文件将准确描述为什么会出现403错误。最后,你可能需要重启apache,只是为了确保所有的配置都被应用了。这通常可以用
/etc/init.d/apache2 restart
来完成。在一些系统上,脚本将被称为httpd。只是弄清楚。daolsyd02#
经过几天的努力,我才解决了这个问题。以下是对我有效的方法:
首先,检查Apache
error_log
文件并查看最新的错误消息。则说明您的文件权限存在问题。您可以通过从终端运行以下命令来修复这些问题:
然后,刷新你的网站应该在的URL(例如
http://localhost/mySite
)。如果你仍然得到一个403错误,如果你的Apacheerror_log
仍然说同样的事情,然后逐步向上移动你的目录树,调整目录权限。你可以在终端上这样做:如有必要,请继续:
并且如果需要,
不要再往上走。你可能会把你的系统搞得一团糟。如果你仍然得到
search permissions are missing on a component of the path
的错误,我不知道你该怎么做。但是,我遇到了一个不同的错误(下面的一个),我修复如下:error_log
显示如下内容:那么您的问题就不是文件权限,而是Apache配置。
请注意,在您的
httpd.conf
文件中,您将看到如下所示的默认配置(Apache 2.4+):或者类似于以下代码(Apache 2.2):
请勿更改此设置!我们不会全局覆盖这些权限,而是在您的
httpd-vhosts.conf
文件中覆盖。但是,首先请确保您的vhostInclude
行在httpd.conf
中为uncommented。它应该如下所示。(您的确切路径可能不同。)现在,打开您刚刚创建的
Include
文件。如果您还没有一个条目,请为您的网页添加一个条目。它应该看起来像这样。DocumentRoot
和Directory
路径应该是相同的,并且应该指向您的index.html
或index.php
文件所在的位置。对我来说,它在public
子目录中。对于Apache 2.2:
台词说
是Apache 2.4+的关键。没有这些,您将无法覆盖
httpd.conf
中指定的默认Apache设置。请注意,如果您使用的是Apache 2.2,这些行应该改为这一变化一直是这个问题的谷歌人困惑的主要来源,如我,因为复制粘贴这些Apache 2.2行将不会在Apache 2.4+中工作,而且Apache 2.2行仍然经常在旧的帮助线程中找到。
保存更改后,重新启动Apache。此命令取决于您的操作系统和安装,因此如果需要帮助,请单独搜索。
希望这对其他人有帮助!
PS:如果您在查找这些
.conf
文件时遇到问题,请尝试运行find
命令,例如:hmmo2u0o3#
restorecon
命令的工作原理如下:fxnxkyjh4#
请注意,另一个 * 可能 * 导致这一点的问题是,父目录的“FollowSymLinks”选项可能被您项目目录的选项错误地覆盖了。我就是这种情况,直到我找到原因才让我抓狂!
下面是这样一个错误的例子:
因此,如果您现在检查Apache的日志消息(
tail -n 50 -f /var/www/html/{the_error_log_file_of_your_site}
),您将看到这样一个错误:这是因为
/var/www
目录的上述规则中的Indexes
覆盖了/
目录中的FolowSymLinks
。因此,现在您知道了原因,为了修复它,您可以根据需要做许多事情。例如:甚至是这样:
上面的例子不会导致覆盖问题,因为在Apache中,如果选项是“+”,它将只覆盖“+“,如果是“-",它将覆盖“-“...(不要问我关于这方面的参考,这只是我对Apache错误消息的解释(通过
journalctl -xe
检查),该消息说:Either all Options must start with + or -, or no Option may.
当一个选项有符号,而另一个没有符号时(例如,FollowSymLinks -Indexes)。因此,这是我个人的结论--因此应该有所保留--如果我使用-Indexes
作为选项,Apache会将其视为与“/”中没有任何符号的另一个选项完全不同的一组选项,因此最后不会发生令人讨厌的重写,我可以在自己的项目目录中通过上述规则成功地确认这一点)。希望这能帮助你少拉头发!:)
kokeuurv5#
然而,它并不能解决问题,因为在例如开放的SUSE Tumbleweed上,自定义源代码构建在默认网页上触发相同的401错误,而默认网页是使用索引和
mf98qq946#
服务器可能需要对主目录和其中的.htaccess具有读取权限
lsmepo6l7#
您可以尝试禁用selinux,然后使用以下命令重试
4c8rllxm8#
在我的情况下,它是失败的,因为我的源服务器的IP没有在目标服务器的白名单。
例如,我试图从源服务器上运行的应用程序访问https://prodcat.ref.test.co.uk。在源服务器上,通过ifconfig查找IP
此IP应该在目标服务器的apache配置文件中列入白名单。如果没有,请将其列入白名单。
添加一个用于白名单的IP(如果您还控制目标服务器)ssh到apache服务器的步骤sudo su - cd /usr/local/apache/conf/extra(实际目录可能会根据您的配置而有所不同)
查找目标应用程序的配置文件,例如prodcat-443.conf
希望这对某人有帮助
2sbarzqh9#
新增
它的作用是告诉Apache 2覆盖之前的所有配置,并在拒绝之前允许所有请求(200)。(403)它还要求所有请求都被授权。这段代码必须放在每个vhost文件中,但它确实有效。我已经用了一年多了。
到您的配置文件(例如/etc/apache 2/sites-enabled/000-default.conf)已测试的LAMP堆栈Debian 11