好的,所以我以前设置了两个虚拟主机,他们工作很酷。它们都包含简单的Web项目,并且在浏览器中与http://project1
和http://project2
一起正常工作。
无论如何,我来添加另一个vhost。我使用127.0.0.1 project3编辑了/ etc / hosts文件,并通过复制和粘贴project2的先前条目并编辑文件路径来更新httpd-vhosts.conf文件。
我已经检查了所有文件和文件夹权限(事实上我是从project2复制并粘贴的),只是在index.php文件中添加了一个“hello world”消息。
访问http://project3
为什么会这样,我只能弄清楚我错过了哪一步,因为一切似乎都设置正确。
提前致谢。
答案 0 :(得分:20)
检查:
此外,您可以查看error.log文件(通常位于/var/log/apache2/error.log),该文件将描述您准确收到403错误的原因。
最后,您可能想要重新启动apache,以确保应用所有配置。
这通常可以使用/etc/init.d/apache2 restart
来完成。在某些系统上,该脚本将被称为httpd。弄清楚。
答案 1 :(得分:6)
restorecon
命令的工作原理如下:
restorecon -v -R /var/www/html/
答案 2 :(得分:6)
经过几天的努力,我才解决了这个问题。这是对我有用的东西:
首先,检查您的Apache error_log
文件并查看最新的错误消息。
如果显示类似以下内容:
access to /mySite denied (filesystem path
'/Users/myusername/Sites/mySite') because search permissions
are missing on a component of the path
然后您的文件权限有问题。您可以通过从终端运行以下命令来修复它们:
$ cd /Users/myusername/Sites/mySite
$ find . -type f -exec chmod 644 {} \;
$ find . -type d -exec chmod 755 {} \;
然后,刷新您的网站应位于的URL(例如http://localhost/mySite
)。
如果仍然出现403错误,并且Apache error_log
仍然说同样的话,请逐步向上移动目录树,并随即调整目录权限。您可以通过以下方式在终端上执行此操作:
$ cd ..
$ chmod 755 mySite
如有必要,请继续:
$ cd ..
$ chmod Sites
,如有必要,
$ cd ..
$ chmod myusername
请勿走得更远。您可以彻底破坏您的系统。
如果您仍然收到表示search permissions are missing on a component of the path
的错误,我不知道您应该怎么做。但是,我遇到了一个不同的错误(下面的错误),我将其修复如下:
如果您的error_log
表示类似以下内容:
client denied by server configuration:
/Users/myusername/Sites/mySite
那么您的问题不在于文件权限,而在于您的Apache配置。
请注意,在您的httpd.conf
文件中,您将看到这样的默认配置(Apache 2.4 +):
<Directory />
AllowOverride none
Require all denied
</Directory>
或类似这样(Apache 2.2):
<Directory />
Order deny,allow
Deny from all
</Directory>
请勿更改此设置!我们不会在全局覆盖这些权限,而是在您的httpd-vhosts.conf
文件中覆盖。
但是,首先,请确保您的Include
中的虚拟主机httpd.conf
行未注释。它应该看起来像这样。 (您的确切路径可能有所不同。)
# Virtual hosts
Include etc/extra/httpd-vhosts.conf
现在,打开刚刚httpd-vhosts.conf
d的Include
文件。如果您还没有网页条目,请为其添加一个条目。它看起来应该像这样。 DocumentRoot
和Directory
路径应该相同,并且应指向index.html
或index.php
文件所在的位置。对我来说,该文件位于public
子目录中。
对于Apache 2.2:
<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/Users/myusername/Sites/mySite/public"
ServerName mysite
# ErrorLog "logs/dummy-host2.example.com-error_log"
# CustomLog "logs/dummy-host2.example.com-access_log" common
<Directory "/Users/myusername/Sites/mySite/public">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
台词
AllowOverride All
Require all granted
对于Apache 2.4+至关重要。没有这些,您将不会覆盖httpd.conf
中指定的默认Apache设置。请注意,如果您使用的是Apache 2.2,则这些行应改为
Order allow,deny
Allow from all
此更改一直是引起该问题的Google员工困惑的主要根源,例如I,因为复制粘贴这些Apache 2.2行在Apache 2.4+中不起作用,并且Apache 2.2行仍旧存在于较早的帮助中线程。
保存更改后,重新启动Apache 。用于此操作的命令将取决于您的操作系统和安装,因此如果需要帮助,请分别在Google上进行搜索。
我希望这对其他人有帮助!
PS:如果找不到这些.conf
文件,请尝试运行find
命令,例如:
$ find / -name httpd.conf
答案 3 :(得分:1)
服务器可能需要您的主目录和.htaccess的读取权限
答案 4 :(得分:1)
但是,它不能解决问题,因为例如打开SUSE Tumbleweed,自定义源代码构建会在默认网页上触发相同的401错误,并相应地使用索引和
进行了配置Require all granted
答案 5 :(得分:0)
您可以尝试禁用selinux,然后使用以下命令再次尝试
setenforce 0
答案 6 :(得分:0)
在我的情况下,由于源服务器的IP未在目标服务器中列入白名单,该操作失败了。
例如我试图从源服务器上运行的应用程序访问https://prodcat.ref.test.co.uk。 在源服务器上,通过ifconfig
查找IP此IP应该在目标服务器的apache配置文件中列入白名单。如果没有,则将其列入白名单。
添加IP列入白名单的步骤(如果您还控制目标服务器) ssh到apache服务器 苏多苏- cd / usr / local / apache / conf / extra(实际目录可以根据您的配置而有所不同)
找到目标应用程序的配置文件,例如prodcat-443.conf
RewriteCond %{REMOTE_ADDR} <YOUR Server's IP>
for e.g.
RewriteCond %{REMOTE_ADDR} !^192\.68\.2\.98
希望这对某人有帮助
答案 7 :(得分:0)
请注意,可能导致 的另一个问题是,上级目录的“ FollowSymLinks”选项可能已被项目目录的选项错误地覆盖 。对我来说就是这种情况,让我拉起头发,直到找到原因为止!
以下是这种错误的示例:
<Directory />
Options FollowSymLinks
AllowOverride all
Require all denied
</Directory>
<Directory /var/www/>
Options Indexes # <--- NOT OK! It's overwriting the above option of the "/" directory.
AllowOverride all
Require all granted
</Directory>
现在,如果您检查Apache的日志消息(tail -n 50 -f /var/www/html/{the_error_log_file_of_your_site}
),您会看到这样的错误:
Options FollowSymLinks and SymLinksIfOwnerMatch are both off, so the RewriteRule directive
is also forbidden due to its similar ability to circumvent directory restrictions
这是因为上述Indexes
目录规则中的/var/www
会覆盖FolowSymLinks
目录的/
。因此,现在您知道了原因,为了解决它,您可以根据需要执行很多操作。例如:
<Directory />
Options FollowSymLinks
AllowOverride all
Require all denied
</Directory>
<Directory /var/www/>
Options FollowSymLinks Indexes # <--- OK.
AllowOverride all
Require all granted
</Directory>
甚至是这样:
<Directory />
Options FollowSymLinks
AllowOverride all
Require all denied
</Directory>
<Directory /var/www/>
Options -Indexes # <--- OK as well! It will NOT cause an overwrite.
AllowOverride all
Require all granted
</Directory>
上面的示例不会引起覆盖问题,因为在Apache中,如果选项为“ +”,则仅覆盖“ +”,如果为“-”,则将覆盖“ -“ s ... (尽管不要问我参考,但这只是我对Apache错误消息的解释(通过journalctl -xe
检查),其中说:Either all Options must start with + or -, or no Option may.
一个选项带有一个符号,而另一个则没有(例如,FollowSymLinks -Indexes)。因此,这是我个人的结论-因此,应该加一点盐-如果我使用-Indexes
作为选项,这将被Apache视为与“ /”中其他选项完全不同的选项集,该选项上没有任何符号,因此最后不会发生烦人的重写,我可以成功确认根据上述规则在我自己的项目目录中。
希望这将帮助您少拉头发! :)