Apache VirtualHost 403 Prohibido

123

Recientemente intenté configurar un servidor de prueba con Apache. El sitio debe ejecutarse bajo dominio www.mytest.com. Siempre recibo un 403 Forbiddenerror. Estoy en Ubuntu 10.10 edición del servidor. La raíz del documento está bajo dir /var/www. Los siguientes son mis ajustes:

Contenido de / 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

Contenido del archivo host en el servidor (con 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

Configuración del sitio

<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>

No tengo ningún .htaccessarchivo en mi raíz de documento. Los permisos están configurados correctamente (legible por www-data).

Si escribo la dirección IP desde mi escritorio, el sitio se muestra correctamente. Cambié el archivo de hosts en mi escritorio para apuntar www.mytest.coma la IP del servidor. Cuando lo uso, me sale 403. Dado que muchas funciones de este sitio son sensibles al nombre del sitio, tengo que poder acceder al sitio por el nombre de dominio.

Otra cosa extraña es que, incluso si todos los archivos de registro se crean correctamente, no tienen información sobre este error.

Estoy atascado. ¿Alguien puede ayudar?

Yuchen Wang
fuente
¿puede agregar el contenido de: sudo sh -c ". /etc/apache2/envvars; apache2 -S"(lista de Virtualhosts) y:sudo sh -c ". /etc/apache2/envvars; grep -R Listen /etc/apache2/*|grep -v \"#\"; grep -R NameVirtual /etc/apache2/*|grep -v \"#\""
regilero
El primer comando regresa a continuación: VirtualHost configuration: 192.168.2.5:* www.mytest.com (/etc/apache2/sites-enabled/mytest.com:1) Syntax OK El segundo regresa: /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
1
probar en serverfault.com
regilero

Respuestas:

296

Apache 2.4.3 (o quizás un poco antes) agregó una nueva característica de seguridad que a menudo resulta en este error. También verá un mensaje de registro con la forma "cliente denegado por la configuración del servidor". La función requiere una identidad de usuario para acceder a un directorio. DEFAULT lo activa en httpd.conf que se incluye con Apache. Puede ver la habilitación de la función con la directiva

Require all denied

Esto básicamente dice que denegar el acceso a todos los usuarios. Para solucionar este problema, elimine la directiva denegada (o mucho mejor) agregue la siguiente directiva a los directorios a los que desea otorgar acceso:

Require all granted

como en

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>
Phil L
fuente
3
Me gustaría señalar que si tiene este problema al usar hosts virtuales, deberá agregar el "Requerir todo otorgado" a cada configuración de host virtual dentro del archivo apache / conf / extra / httpd-vhosts.conf.
Soundfx4
1
He agregado esta directiva /etc/apache2/apache2.confy me ayudó, ¡gracias!
DmitMedv
@ Soundfx4, no hay una carpeta llamada apache/conf/extradentro/etc/apache2
Negro
Agregué /var/dev/website.com y recibí un error 403. Agregar la directiva sugerida a /etc/apache2/apache2.conf (ubuntu) hizo el truco. ¡Gracias chicos!
LoveFineArt
Gracias Señor. Apache es cada vez más difícil trabajar en estos días ...
OoDeLally
15

Para Apache Ubuntu 2.4.7, finalmente descubrí que necesita incluir en la lista blanca su host virtual en apache2.conf

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

Esto puede ser un problema de permisos.

cada ruta principal a la raíz del documento virtual debe ser legible, escribible y ejecutable por el usuario httpd del servidor web

de acuerdo con esta página sobre los errores Apache 403.

Como está utilizando Allow from all, su orden no debería importar, pero puede intentar cambiarlo Deny,Allowpara establecer el comportamiento predeterminado en "permitir".

Estallidos
fuente
44
Escribible? ¿De Verdad? No estoy seguro
php-dev
5

Mueva la cláusula Directory fuera del host virtual y póngala antes de declarar el host virtual.

También me volví loco por mucho tiempo. No se porque. Es una cosa de Debian.

samtresler
fuente
Woah, eso es muy raro.
kako-nawao
0

Si hiciste todo bien, solo da el permiso al directorio de inicio como:

sudo chmod o+x $HOME

luego

sudo systemctl restart apache2
cagcak
fuente
0

El problema era que el permiso de acceso al archivo era incorrecto.

Cambié los permisos del directorio y funcionó.

Sebastian Viereck
fuente
0

También tuve este problema en Arch Linux ... me cuesta algo de tiempo, pero estoy feliz de haber encontrado mi error:

Mi directorio con los .htmlarchivos en mi cuenta.
Configuré todo r+xpero aún recibí el 403error.
Luego volví completamente e intenté configurar mi directorio de inicio para que se ejecutara, lo que resolvió mi problema.

TornaxO7
fuente
-1

Acabo de pasar varias horas en este estúpido problema

Primero, cambie los permisos usando esto en la terminal

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

No sé cuál es la diferencia entre 664 y 775 Hice ambos 775 de esta manera También htdocs necesita la ruta del directorio, por ejemplo, para mí fue

/usr/local/apache2/htdocs 

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

Esta es la otra cosa tonta también

asegúrese de que su enlace src de imagen sea su nombre de dominio, por ejemplo

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

Asegúrate de tener

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

Editas los que usan pico en la terminal

También creé un directorio para imágenes específicamente para que cuando escriba la barra de direcciones del navegador domainname.com/images, obtenga una lista de fotos que se pueden descargar y deben descargarse correctamente para indicar que los archivos de imágenes funcionan correctamente

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

Y esas son las soluciones que he probado, ahora tengo imágenes que funcionan ...

Sobre el (los) siguiente (s) problema (s)

Jacob David C. Cunningham
fuente