Gentoo Logo

Solución de problemas de Apache

Contenido:

1.  Revisar el registro

Si tiene algún problema con su Apache pero no sabe cómo resolverlo, los primeros indicios se encontrarán en los ficheros de registro.

Hay varios ficheros de registro para Apache. Todos ellos se encuentran en /var/log/apache2/. No todos los siguientes ficheros de registro estarán en su sistema: depende de qué módulos haya habilitado.

access_log y ssl_access_log

Listado de Código 1.1: access_log

67.185.0.236 - - [18/Jun/2005:12:05:50 -0700] "GET / HTTP/1.0" 200 721
10.0.1.80 - - [18/Jun/2005:12:11:07 -0700] "GET /~jaspenelle/__journal1.jpg HTTP/1.1" 200 19079
66.239.233.163 - - [18/Jun/2005:12:15:06 -0700] "GET /~jaspenelle/avy14.gif HTTP/1.0" 200 1661
67.185.60.155 - - [18/Jun/2005:12:18:48 -0700] "GET / HTTP/1.0" 200 721
67.185.0.236 - - [18/Jun/2005:12:25:39 -0700] "GET / HTTP/1.0" 200 721
10.0.1.80 - - [18/Jun/2005:12:28:04 -0700] "GET /~jaspenelle/avy14.gif HTTP/1.1" 200 1661
10.0.1.80 - - [18/Jun/2005:12:28:46 -0700] "GET /~jaspenelle/avy7.png HTTP/1.1" 200 13066

Este fichero es, sencillamente, un listado de los archivos solicitados a su servidor. A menos que haya cambiado la configuración por defecto, se encontrará en Formato Común de Registro:

Listado de Código 1.2: Sintaxis del Formato Común de Registro

remotehost rfc931 authuser [date] "request" status bytes
remotehost Nombre del host remoto o dirección IP
rfc931 El nombre de registro remoto del usuario.
authuser El nombre de usuario con el que se ha autenticado el usuario.
[date] Fecha y hora de la petición.
"request" La línea de la petición, exactamente como vino desde el cliente.
status El código de estado HTTP devuelto al usuario.
bytes El tamaño del documento transferido.

error_log y ssl_error_log

Listado de Código 1.3: error_log

[Mon Feb 07 23:33:18 2005] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec2)
[Mon Feb 07 23:33:18 2005] [notice] Digest: generating secret for digest authentication ...
[Mon Feb 07 23:33:18 2005] [notice] Digest: done
[Mon Feb 07 23:33:18 2005] [notice] Apache/2.0.52 (Gentoo/Linux) PHP/4.3.10 configured -- resuming normal operations
[Sat Jun 18 13:01:54 2005] [error] [client 10.0.1.80] File does not exist: /var/www/localhost/htdocs/favicon.ico
[Sat Jun 18 13:02:14 2005] [error] [client 10.0.1.80] File does not exist: /var/www/localhost/htdocs/favicon.ico
[Sat Jun 18 13:02:18 2005] [error] [client 10.0.1.80] File does not exist: /var/www/localhost/htdocs/favicon.ico
[Sat Jun 18 13:02:21 2005] [error] [client 10.0.1.80] File does not exist: /var/www/localhost/htdocs/favicon.ico
[Sat Jun 18 13:02:24 2005] [error] [client 10.0.1.80] File does not exist: /var/www/localhost/htdocs/favicon.ico

Como puede ver, este fichero puede contener multitud de información, dependiendo de la directiva ErrorLevel en su fichero httpd.conf. Le dice si Apache se inició correctamente, con qué errores se topó, etc. En general, le dirá qué fue mal. Si hay algo que no esté funcionando bien, éste debería ser el primer fichero que revise para saber si hay más información.

suexec_log

Listado de Código 1.4: suexec_log

[2005-02-11 22:33:19]: uid: (1000/vericgar) gid: (1000/1000) cmd: test.cgi
[2005-03-11 19:20:13]: uid: (1000/vericgar) gid: (1000/1000) cmd: test.cgi
[2005-03-11 19:34:47]: uid: (1000/vericgar) gid: (1000/1000) cmd: test.cgi

Este fichero contiene una entrada de registro por cada vez que se ejecuta un script mediante CGI y suexec. Si no consigue hacer funcionar un script con suexec, este registro es el único a revisar pues, en general, tendrá una línea por cada vez que no consiguiera ejecutar un script.

2.  Instalé un módulo, ¡Pero no funciona!

Instalar sólo el módulo no es suficiente - tiene que activarlo explícitamente. Hacemos esto de manera que sea fácil activar o desactivar módulos individuales lo que hace sencillo encontrar qué módulo está causando problemas y le permite probarlos y desactivarlos fácilmente.

Cuando instale un módulo, debería mostrar un mensaje parecido a éste:

Listado de Código 2.1: Mensaje de post-instalación de emerge

 *
 * To enable mod_layout, you need to edit your /etc/conf.d/apache2 file and
 * add '-D LAYOUT' to APACHE2_OPTS.
 *
 *
 * Configuration file installed as
 *     /etc/apache2/modules.d/15_mod_layout.conf
 * You may want to edit it before turning the module on in /etc/conf.d/apache2
 *

Éste es bastante sencillo. Le dice exactamente lo que necesita hacer para activar este módulo.

Si perdió este mensaje, hay otro modo de averiguar qué necesita añadir a la variable APACHE2_OPTS en APACHE2_OPTS: simplemente revise el fichero de configuración del módulo instalado. Éste debería estar agregado a /etc/apache2/modules.d/. Búsquelo ahí y encuentre una línea que tenga la directiva IfDefine:

Listado de Código 2.2: Un extracto de 15_mod_layout.conf

<IfDefine LAYOUT>
  <IfModule !mod_layout.c>
    LoadModule layout_module    modules/mod_layout.so
  </IfModule>
</IfDefine>

El bloque IfDefine se ejecuta cuando añade -D LAYOUT a /etc/conf.d/apache2. LAYOUT es sólo un ejemplo.

Hay varias opciones que puede añadir a APACHE2_OPTS y que se especifican en la configuración predeterminada y que se encuentran bien explicadas en el archivo /etc/conf.d/apache2.

La información de todos los módulos que Apache incorpora se puede encontrar en la Documentación del Servidor HTTP Apache 2.0.

3.  Apache devuelve páginas vacías o violaciones de segmento

Esto sucede sobre todo después de una actualización, debido a que la compatibilidad del binario se rompe en la librería APR --Apache Portable Runtime-- (lo cual puede ocurrir por varias razones). Para arreglarlo, tiene que reconstruir APR:

Listado de Código 3.1: Reconstruir APR

(asegúrese de seguir estos pasos en orden, ¡Es muy
importante!)

(primero tenemos que borrar el Apache instalado actualmente)
# emerge -aCv '=www-servers/apache-2*'

(luego reconstruimos APR)
# emerge -av '=dev-libs/apr-0*' '=dev-libs/apr-util-0*'

(posteriormente reinstalamos Apache)
# emerge -av '=www-servers/apache-2*'

(determine cualquier paquete que dependa de Apache)
$ equery depends www-servers/apache
[ Searching for packages depending on www-servers/apache... ]
dev-php/phpsysinfo-2.3-r2
dev-php/phpsysinfo-2.1-r2
dev-lang/php-5.2.4_p20070914-r2
net-www/mod_layout-4.0.1a-r1
www-servers/gorg-0.5

(luego reconstruya cualquier módulo que haya instalado)
# emerge -av '=dev-lang/php-5.2.4_p20070914-r2' '=net-www/mod_layout-4.0.1.a-r1'

Determinar un módulo con fallos complementario

Si todavía tiene problemas después de seguir las instrucciones de antes, muy probablemente el culpable sea uno de sus módulos complementarios instalados.

Comience por desactivar todos los módulos complementarios y reinicie Apache.

Listado de Código 3.2: Desactivar módulos complementarios

(edite /etc/conf.d/apache2)

(antes del cambio)
APACHE2_OPTS="-D PHP5 -D USERDIR -D SSL"

(después)
APACHE2_OPTS=""

Listado de Código 3.3: Reiniciar Apache

# /etc/init.d/apache2 stop
(Asegúrese de que Apache esté parado del todo)
# ps -A
# /etc/init.d/apache2 start

Nota: Puede que tenga que hacer un par de cambios a ciertas partes de su configuración si tiene agregada alguna Directive que estos módulos proporcionan en sitios que no prueban para el módulo que está siendo cargado. Se recomienda que las Directives como éstas estén colocadas en contenedores de prueba. Mire en cualquiera de los ficheros .conf en /etc/apache2/modules.d.

Si Apache sigue terminando en violación de segmento y dando páginas en blanco, entonces sabe que, sin lugar a dudas, era uno de los módulos complementarios. Para averiguar cuáles eran, los vamos añadiendo uno a uno y reiniciando Apache en cada momento.

Cuando Apache deje de funcionar después de añadir un módulo, sabe qué ese módulo es lo único que causa problemas. A veces, simplemente con reconstruir el módulo el problema se arregla.

Si después de reconstruir el módulo y reiniciar Apache todavía tiene problemas de violación de segmento con él o le sigue devolviendo páginas en blanco, debería enviar un bug (un informe del error) indicando la versión y revisión concreta del módulo y mencionar que éste provoca una violación de segmento. ¡Asegúrese de buscar antes en los bugs que todavía estén abiertos!

4.  El servidor web no interpreta los scripts PHP o CGI sino que devuelve su código

Parece que a veces Apache devuelve el código de los scripts PHP o CGI en vez de ejecutarlos y devolver la salida de los mismos. Si esto ocurre aun cuando el módulo está habilitado en /etc/conf.d/apache2 es muy probable que se trate de una cuestión de caché. Este problema se soluciona con limpiar la caché del navegador web.

A veces, este problema también se puede apreciar cuando se accede al servidor web a través de su nombre de dominio y no cuando se accede mediante su dirección IP. Este es un firme indicio de que se trata de un problema de caché.

Este problema se puede arreglar limpiando la caché del navegador web y cualquier proxy web como squid o wwwoffle.

5.  configure: error: changes in the environment can compromise the build

Si obtiene este error, entonces probablemente tenga espacios innecesarios en su variable CFLAGS en /etc/make.conf. La solución es simple, quitar los espacios extra:

Listado de Código 5.1: Ejemplo de cambios en /etc/make.conf

(antes del cambio)
CFLAGS="-O2 -mcpu=pentium3 -march=pentium3  -pipe"

(después - dese cuenta de la eliminación del espacio)
CFLAGS="-O2 -mcpu=pentium3 -march=pentium3 -pipe"

6.  Address already in use: make_sock: could not bind to address 0.0.0.0:443

Este error ocurre durante la inicialización y es causado por tener múltiples directivas Listen incompatibles en su configuración. Para solucionar este problema, debería utilizar grep para buscar las directivas Listen en su configuración y corregir cada ocurrencia.

Listado de Código 6.1: Buscar todas las directivas Listen

(Asegúrese de estar dentro del directorio de configuración)
# cd /etc/apache2/

(Listar todas las directivas Listen)
# grep Listen httpd.conf vhosts.d/*.conf modules.d/*.conf

Lo que está buscando son conflictos con los que Apache intente asociarse. Por ejemplo, si hay un Listen 80 en httpd.conf y también hay un Listen 10.0.0.15:80 en otro fichero, entonces Apache no será capaz de arrancar. Esto es debido a que Apache primero se asocia al puerto 80 en todas las direcciones IP de la máquina y luego intenta hacerlo también al puerto 80 de la dirección IP 10.0.0.15. Falla porque el puerto 80 ya está en uso.

La configuración recomendada es aquella que tenga un único Listen 80 (ésta es la configuración predeterminada de httpd.conf) así que asocie al puerto HTTP estándar a todas las direcciones por defecto y luego cree una directiva Listen absoluta para cada VirtualHost SSL (como por ejemplo Listen 10.0.0.15:443).

7.  Después de actualizar a apache-2.0.54-r13 los vhosts por defecto (SSL y no SSL) han dejado de funcionar

Con la actualización a apache-2.0.54-r13, se le agregaron dos nuevas directivas para corregir el bug 100624.

La nuevas directivas son -D DEFAULT_VHOST para activar el host virtual por defecto y -D SSL_DEFAULT_VHOST para activar el host virtual por SSL defecto. Ambas tienen que ser añadidas a la variable APACHE2_OPTS de /etc/conf.d/apache2 si quiere que Apache se comporte como antes.

8.  Obtener ayuda

Si nada de lo dicho anteriormente le ha servido o si tiene otras cuestiones, tómese la libertad de pasarse por nuestro canal de IRC #gentoo-apache en irc.freenode.net. O también puede enviar un bug en el Bugzilla de Gentoo.



Imprimir

Página actualizada 29 de noviembre, 2007

Sumario: Este documento abarca varias formas de evaluar cómo resolver su instalación de Apache cuando las cosas no funcionen correctamente.

Michael Stewart
Autor

Elfyn McBratney
Colaborador

Bryan Østergaard
Colaborador

Benedikt Böhm
Colaborador

Enrique Barbeito García
Traductor

John Christian Stoddart
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.