Solución de problemas de Apache
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 |
# emerge -aCv '=www-servers/apache-2*'
# emerge -av '=dev-libs/apr-0*' '=dev-libs/apr-util-0*'
# emerge -av '=www-servers/apache-2*'
$ 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
# 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 |
APACHE2_OPTS="-D PHP5 -D USERDIR -D SSL"
APACHE2_OPTS=""
|
Listado de Código 3.3: Reiniciar Apache |
# /etc/init.d/apache2 stop
# 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 |
CFLAGS="-O2 -mcpu=pentium3 -march=pentium3 -pipe"
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 |
# cd /etc/apache2/
# 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.
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logo y nombre de Gentoo.
|