禁止使用Apache VirtualHost 403


123

我最近尝试用Apache设置测试服务器。该站点必须在domain下运行www.mytest.com。我总是会403 Forbidden出错。我使用的是Ubuntu 10.10服务器版本。doc根目录在dir下/var/www。以下是我的设置:

/ var / www的内容

ls -l /var/www/

total 12
drwxr-xr-x 2 root root 4096 2011-08-04 11:26 mytest.com
-rwxr-xr-x 1 root root 177 2011-07-25 16:10 index.html

服务器上主机文件的内容(IP 192.168.2.5)

cat /etc/hosts

127.0.0.1 localhost 
127.0.1.1 americano
192.168.2.5 americano.mytest.com www.mytest.com

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

网站配置

<VirtualHost *>
ServerAdmin admin@mytest.com
ServerName www.mytest.com
ServerAlias mytest.com

DocumentRoot "/var/www/mytest.com"

ErrorLog /var/log/apache2/mytest-error_log
CustomLog /var/log/apache2/mytest-access_log combined

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/mytest.com">
Options -Indexes FollowSymLinks
AllowOverride None

Order allow,deny
Allow from all
</Directory>
</VirtualHost>

.htaccess我的文档根目录中没有文件。权限设置正确(可通过www-data读取)。

如果我从桌面输入IP地址,则该站点将正确显示。我将桌面上的主机文件更改为指向www.mytest.com服务器的IP。使用它时,我得到了403。由于此站点的许多功能都对站点名称敏感,因此我必须能够通过域名访问该站点。

另一个时髦的事情是,即使正确创建了所有日志文件,它们也没有有关此错误的信息。

我被困住了。有人可以帮忙吗?


您是否可以添加以下内容sudo sh -c ". /etc/apache2/envvars; apache2 -S":(sudo sh -c ". /etc/apache2/envvars; grep -R Listen /etc/apache2/*|grep -v \"#\"; grep -R NameVirtual /etc/apache2/*|grep -v \"#\""
虚拟主机

第一条命令返回: VirtualHost configuration: 192.168.2.5:* www.mytest.com (/etc/apache2/sites-enabled/mytest.com:1) Syntax OK 第二条返回: /etc/apache2/ports.conf:Listen 80 /etc/apache2/ports.conf: Listen 443 /etc/apache2/ports.conf: Listen 443 /etc/apache2/conf.d/virtual.conf:NameVirtualHost *
Yuchen Wang

Answers:


296

Apache 2.4.3(或者可能更早)添加了一个新的安全功能,该功能通常会导致此错误。您还将看到“服务器配置拒绝客户端”形式的日志消息。该功能要求用户身份才能访问目录。它由Apache随附的httpd.conf中的DEFAULT启用。您可以通过指令看到该功能的启用

Require all denied

这基本上是说拒绝所有用户访问。要解决此问题,请删除拒绝指令(或者更好),将以下指令添加到您要授予访问权限的目录中:

Require all granted

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>

3
我想指出的是,如果您在使用虚拟主机时遇到此问题,则需要在apache / conf / extra / httpd-vhosts.conf文件中的每个虚拟主机设置中添加“要求全部授予”。
Soundfx4

1
我已经添加了该指令/etc/apache2/apache2.conf,它对您有所帮助,谢谢!
DmitMedv

@ Soundfx4,没有文件夹,名为apache/conf/extra里面/etc/apache2
黑色

我添加了/var/dev/website.com并收到403错误。将建议的指令添加到/etc/apache2/apache2.conf(ubuntu)即可达到目的。多谢你们!
LoveFineArt's

谢谢你,先生。这些天,Apache的工作越来越难...
OoDeLally

15

对于apache Ubuntu 2.4.7,我终于发现您需要在apache2.conf中将虚拟主机列入白名单。

# access here, or in any related virtual host.
<Directory /home/gav/public_html/>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

8

这可能是权限问题。

Web服务器httpd用户必须指向虚拟文档根目录的每个父路径,并且必须是可读,可写和可执行的

根据此页面有关Apache 403的错误。

由于您正在使用Allow from all,因此您的订单无关紧要,但是您可以尝试将其切换Deny,Allow为将默认行为设置为“允许”。


4
可写的?真?我不确定
php-dev

5

将Directory子句移出虚拟主机,并在声明虚拟主机之前将其放置。

也让我疯了很久。不知道为什么。这是Debian的事情。


哇,好奇怪。
kako-nawao 2015年


0

如果您做对了所有事情,请给权限主目录,例如:

sudo chmod o+x $HOME

然后

sudo systemctl restart apache2


0

我在Arch Linux上也遇到了这个问题...这花了我一些时间,但是现在我发现自己的错误,我感到很高兴:

我的目录中包含.html文件的位置。
我设置了所有内容,r+x但仍然出现403错误。
然后我完全回去尝试设置我的主目录执行,这解决了我的问题。


-1

我刚花了几个小时解决这个愚蠢的问题

首先,在终端中使用此权限更改权限

find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +

我不知道664和775之间有什么区别,我也这样做了775,而且htdocs需要例如我的目录路径

/usr/local/apache2/htdocs 

find htdocs -type f -exec chmod 775 {} + -o -type d -exec chmod 775 {} +

这也是另一件事

确保您的图片src链接是您的域名,例如

src="http://www.fakedomain.com/images/photo.png"

一定要有

EnableSendfile off in httpd.conf file
EnableMMAP off in httpd.conf file

您在终端中使用pico编辑那些

我还专门为图像创建了一个目录,这样,当您在浏览器地址栏中输入domainname.com/images时,您将获得一张照片列表,可以下载这些照片,并需要成功下载它们以指示图像文件正常工作

<Directory /usr/local/apache2/htdocs/images>
AddType images/png .png
</Directory>

这些是我尝试过的解决方案,现在我的图像可以正常工作了。

进入下一个问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.