2011-08-05 129 views
94

我最近试图用Apache设置测试服务器。该网站必须在域名www.mytest.com下运行。我总是得到一个403 Forbidden错误。我在Ubuntu 10.10服务器版上。 doc根目录下的目录/var/www。以下是我的设置:在/ var/WWW的Apache VirtualHost 403 Forbidden

内容

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 [email protected] 
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地址,该网站显示正确。我将桌面上的hosts文件更改为指向服务器IP的www.mytest.com。当我使用它时,我得到403。由于本网站的许多功能对网站名称敏感,因此我必须能够通过域名访问网站。

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

我卡住了。任何人都可以帮忙吗?

+0

可以添加的内容:'须藤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 \“#\”“ ' – regilero

+0

第一个命令返回以下内容: 'VirtualHost配置: 192.168.2.5:* www.mytest.com(/ etc /的Apache2 /网站启用/ mytest.com:1) 语法OK' 第二个返回: '/etc/apache2/ports.conf:Listen 80 /etc/apache2/ports.conf:听443 /etc/apache2/ports.conf:Listen 443 /etc/apache2/conf.d/virtual.conf:NameVirtualHost *' –

+1

尝试http://serverfault.com/ – regilero

回答

242

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

I wo请注意,如果您使用虚拟主机出现此问题,则需要将“Require all granted”添加到apache/conf/extra/httpd-vhosts.conf文件中的每个虚拟主机设置。 – Soundfx4

+0

我已将此指令添加到'/ etc/apache2/apache2.conf'并且它有帮助,谢谢! – DmitMedv

+0

@ Soundfx4,'/ etc/apache2'里面没有名为'apache/conf/extra'的文件夹 – Black

8

这可能是一个权限问题。

到虚拟文档根的每一个父路径必须根据this page关于Apache 403错误是可读,可写,以及可执行由web服务器的httpd用户

由于您使用的是Allow from all,您的订单应该没有关系,但您可以尝试将其切换为Deny,Allow以将default behavior设置为“允许”。

+4

可写?真的吗?我不确定 –

4

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

也驱使我坚持了很长时间。不知道为什么。这是Debian的事情。

+0

哇,真奇怪。 –

0

我的问题是,这文件访问权限是错误的,我改变了目录的权限和它的工作对我来说

10

对于Apache 2.4.7的Ubuntu,我终于找到你需要白名单您的虚拟主机在apache2.conf

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

我只是在终端

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 

您在终端

编辑那些使用微微

我还专门为图像创建了一个目录,这样当您在浏览器地址栏domainname.com/images中输入内容时,您将看到可以下载的照片列表和需要被成功下载到指示图像文件被正确

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

工作,这些都是我已经尽力了,我现在已经运行的图像解决方案...耶!

到下一个问题(S)

0

如果您做的一切正确,只需提供E中的权限主目录,如:

sudo chmod o+x $HOME 

然后

sudo systemctl restart apache2