Archive for the ‘Apache’ Category

Caida del servidor

Hoy Sabado dia 3 de Noviembre, desde las 07:00 de la mañana hasta las 11:00 de la mañana del mismo dia, la web ha estado inaccesible debido a la caida del servicio Apache por causas que aun no he podido determinar.

El servicio estaba parado, pero el servidor respondia correctamente al ping y el resto de servicios funcionaban correctamente.

Lo siento mucho, me he equivocado. No volvera a ocurrir.

Cambios en el servidor. Adios Appserv, hola XAMPP

Hoy he estado practicamente todo el dia con el servidor parado por culpa de una obsesion que me entro en querer montar un portal con Zen Cart, para probar el e-commerce y realizar unas pruebas que tenia pendientes.

Uno de los requisitos para instalar Zen Cart, es que la version de PHP del servidor sea como minimo la 5.3, cosa que con Appserv 2.5.10 no cumplia.

Os preguntareis, ¿por que no instalas la ultima version de Appserv que trae soporte para PHP6, la 2.6.0? Y yo os respondo por esto, con la version PHP6 no funciona WordPress, al menos en mi caso, la unica solucion que me quedo fue volver a poner la version anterior de Appserv.

He optado por cambiar a XAMPP, ya que la version de PHP que trae es la 5.3.8, pero todo este cambio tan sencillo aparentemente no ha sido tal.

Entre que no recordaba bien como configurar el archivo de Apache para que el blog no se colgase llegado a un numero de conexiones y que tenia tal cantidad de usuarios y claves para todo este tema, pues he tardado mas de la cuenta, eso si, el Zen Cart aun esta por instalar, cosas de la vida.

Por cierto, supongo que seria coincidencia, pero he sufrido una especie de ataque masivo de spam en comentarios que me han tirado varias veces el blog abajo. Espero que fuera algo temporal y que ahora este todo correcto.

Un saludo y perdonar.

Como tener varias webs alojadas en el mismo servidor con una misma ip y varios dominios a la vez con Apache 2.2

Aqui no se va a explicar como crear un servidor web con Apache, ni como redireccionar un dominio a un IP, esto se supone que ya lo traeis de casa.

Lo que se va a explicar es como en una misma maquina con una sola ip y con el servidor WEB Apache, es posible tener alojadas varias webs y cada una de ellas con un dominio diferente. Eso se llama “virtual host”.

Una vez tenemos instalado el servidor web Apache 2.2, todo lo que metamos en la carpeta www sera visible por el puerto 80, bien sea un index de una web, imagenes o documentos.

La gracia viene cuando queremos agregar mas webs y mas dominios apuntando a la misma direccion IP, ¿como hacer que el Apache se entere de que pagina queremos que muestre? Os lo voy a explicar de forma muy sencilla, con un ejemplo practico.

Mi servidor tiene la IP 91.126.223.73, esto no es un secreto, si haceis ping a www.mur3.com desde una ventana MS-DOS os respondera, y si la introducis en el navegador os lleva a www.mur3.com.
Tengo instalado Apache 2.2, en el raiz de la carpeta www estan los ficheros del blog www.mur3.com, hasta aqui todo muy sencillo. El dominio www.mur3.com esta configurado en 1and1 como DNS, lo podeis ver mejor en la siguiente imagen:

Como DNS principal esta la IP fija EXTERNA de mi servidor. Por la parte del dominio lo tenemos todo correcto.
Supongamos que tenemos otro dominio, por ejemplo www.minuevaweb.com, en 1and1 tambien. El proceso de configuracion es igual al de mur3.com, como DNS apuntando a la IP fija EXTERNA de nuestro servidor.

IMPORTANTE: Yo estoy usando 1and1 como proveedor de dominios, entiendo que en otro proveedor cualquiera de dominios esta configuracion se pueda hacer, tiene que permitir que el dominio X se configure como DNS apuntando a nuestra IP externa, nada mas.

Como todo tiene que estar dentro de la carpeta www, supongamos que tenemos este arbol de directorios:

Carpeta WWW, dentro de ella, los ficheros de la web “original” mur3.com, y una carpeta llamada minuevaweb. Dentro de la carpeta minuevaweb, tendremos el index.htm y demas ficheros de la web. ¿Hasta aqui bien no? Tenemos una web dentro de otra. Yo por ejemplo tengo una carpeta dentro del www, que se llama hosting, y dentro de ella voy creando las carpetas para los diferentes proyectos web que voy fabricando.

Ahora toca modificar los ficheros de configuracion del Apache, ojo, yo instalo el paquete Appserv, pero el Apache se modifica y se trabaja igual que si lo instalais por su cuenta, tenerlo en cuenta para las rutas.

1.- Buscamos el httpd.conf en la siguiente ruta -> C:\AppServ\Apache2.2\conf
2.- Abrimos con Wordpad para editar
3.- Buscar estas dos lineas:

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

DESCOMENTAR la segunda linea, que queden asi, sin la #:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

4.- Guardar los cambios del fichero httpd.conf, esto que acabamos de hacer es para cargar un modulo en el Apache llamado httpd-vhosts.conf, que es lo que nos permite hacer lo que os estoy explicando, el cual vamos a editar con nuestra configuracion ahora.
5.- Buscar el fichero httpd-vhost.conf en la siguiente ruta: C:\AppServ\Apache2.2\conf\extra
6.- Abrimos con Wordpad para editar, si leemos lo que pone al principio veremos que es exactamente lo que estamos buscsando hacer:

#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn’t need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.

Una vez abierto vamos al final del fichero, vereis esto:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.x
    DocumentRoot “C:/Apache2.2/docs/dummy-host.x”
    ServerName dummy-host.x
    ServerAlias www.dummy-host.x
    ErrorLog “logs/dummy-host.x-error.log”
    CustomLog “logs/dummy-host.x-access.log” common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.x
    DocumentRoot “C:/Apache2.2/docs/dummy-host2.x”
    ServerName dummy-host2.x
    ErrorLog “logs/dummy-host2.x-error.log”
    CustomLog “logs/dummy-host2.x-access.log” common
</VirtualHost>

No os asusteis, que no escupen, si leeis y comprendeis lo que pone, vereis que son ejemplos de como configurar multiples host virtuales. Aprovechamos la estructura ya que lo que tenemos actualmente son dos webs, pues os tendria que quedar asi segun los datos que os he ido comentando mas arriba:

<VirtualHost *:80>
    ServerAdmin administrdor@mur3.com
    DocumentRoot “C:/Apache2.2/www”
    ServerName mur3.com ->
    ServerAlias www.mur3.com
    ErrorLog “logs/mur3”
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin administrador@minuevaweb.com
    DocumentRoot “C:/Apache2.2/www/minuevaweb”
    ServerName minuevaweb.com
    ErrorLog “logs/minuevaweb”
</VirtualHost>

Guardais el fichero httpd-vhost.conf, reinicias el Apache o reinicias la maquina y todo deberia de funcionar correctamente, al poner www.mur3.com, apareceria el contenido de www y al poner www.minuevaweb.com, apareceria el contenido de www/minuevaweb. Si teneis 3 webs, pues tres de estos, si teneis 4 pues 4, y asi hasta los que querais.

¿Que conseguimos con esto? Una redireccion bien hecha, ya que sino, la tipica solucion es apuntar a la direccion completa directamente, por ejemplo, www.minuevaweb.com, si la configuramos a lo cutre apuntaria a www.mur3.com/www/minuevaweb y en la barra de navegacion apareceria esta ruta asquerosa, de esta forma lo estamos haciendo correcto y evitando que “se sepa” donde esta alojada nuestra web realmente.

Dudas sobre esto, ya sabeis, en los comentarios se os ayudara en la medida de lo posible.

 

Error php_mbstring.dll en servidor web Apache 2.2, solucion

error apache2

error apache

Estos dias he tenido en el servidor un problema que me traia por el camino de la amargura y no sabia por donde atacarlo ni como solucionarlo, no tenia ni idea de que pasaba.

Cada cierto tiempo, cada 5 o 6 horas de uso, el servidor web Apache 2.2 se colgaba, no daba ningun mensaje de error, pero si intentabas entrar en mi blog, no aparecia nada, pagina en blanco. Intentaba ver que estaba pasando en el servidor y todo parecia que iba bien, conexion OK, servicios arriba, carga de CPU a 3%, carga en RAM 500MB, nada, todo era normal, menos una cosa, cada vez que intentaba reiniciar el servidor Apache, me salia este error que os muestro en las imagenes de arriba. Si leeis el primer error, vereis que dice algo como que ya existe otro servicio escuchando por el puerto 80. Al intentar cerrar esta ventana, me salia automaticamente el siguiente error, una dll que no es capaz de cargar, bueno, nunca jamas me habia salido este error en los años que llevo con Apache, que no son pocos.

Reiniciando la maquina entera, el blog volvia a la vida, pero eso no era solucion, era una gran mierda, hasta programe reinicios automaticos cada 6 horas por que estaba desesperado y no sabia donde buscar. Hasta que  me puse a buscar a conciencia y en una pagina inglesa, a otro colega le pasaba lo mismo y no sabia por que era, pues antes no le habia salido nunca, como a mi.

Segun he podido ver en la evolucion del servidor despues de aplicar la solucion que os voy a dar, es debido a la instalacion de “algun” plugin de WordPress (no se cual, que “toca” algo del PHP pero NO modifica la carga de la dll en cuestion, osea, que hace uso de la dll, pero no es capaz de modificar el php.ini por que ESTA SIN RENOMBRAR EN APPSERV, SE DEBE RENOMBRAR y descomentar la funcion de carga de la dll. Por pasos lo veremos mejor, yo uso Appserv, por lo que la ruta de los archivos puede variar, pero el nombre de los archivos deberia coincidir, intentare hacerlo lo mas generico posible:

1.- Localizar el php.ini, en el caso de Appserv, esta en la siguiente ruta: C:\Appser\php5\php.ini
ATENCION, IMPORTANTE: Si no habeis tocado el php.ini todavia, se llamara php.ini-dist o algo similar, debies renombrarlo a php.ini, sino, aunque hagais modificaciones, no las cargara.

2.- Una vez localizado y renombrado el php.ini, localizar la linea ;extension=php_mbstring.dll, fijaros en que tiene un “;” delante, quitarlo para que se cargue la dll, guardar los cambios.
Para buscar rapido la linea, editar el php.ini con el blog de notas, ir a Edicion -> Buscar -> php_mbstring.dll

3.- Una vez guardados los cambios, parar el servidor Apache y volver a iniciarlo, una vez iniciado, REINICIARLO otra vez, si todo ha ido bien, no deberia de salir este error.

[warn] (OS 10038)Se intentó realizar una operación en un elemento que no es un socket. : setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed.

[warn] (OS 10038)Se intentó realizar una operación en un elemento que no es un socket.  : setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed.

Otro [warn] localizado y solucionado, este es sencillo, simplemente en una ventana MS-DOS donde esteis corriendo Apache ejecutar el siguiente comando:

netsh winsock reset

Reinicias el Apache y… ¡magia!

Esto tiene que ver con la adicion de esta linea Win32DisableAcceptEx en el httpd.conf, que, curiosamente fue lo que hice antes de que este nuevo [warm] comenzara a aparecer.

Ahora os voy a dar envidia, un error.log limpio, sin errores:

The Apache2.2 service is restarting.
The Apache2.2 ser:09 2011] [notice] Parent: Received restart signal — Restarting the server.
[Fri Jul 29 00:39:09 2011] [notice] Child 3272: Exit event signaled. Child process is ending.
[Fri Jul 29 00:39:09 2011] [notice] Apache/2.2.8 (Win32) PHP/5.2.6 configured — resuming normal operations
[Fri Jul 29 00:39:09 2011] [notice] Server built: Jan 18 2008 00:37:19
[Fri Jul 29 00:39:09 2011] [notice] Parent: Created child process 2200
[Fri Jul 29 00:39:09 2011] [notice] Disabled use of AcceptEx() WinSock2 API
[Fri Jul 29 00:39:09 2011] [notice] Child 2200: Child process is running
[Fri Jul 29 00:39:10 2011] [notice] Child 3272: Released the start mutex
[Fri Jul 29 00:39:10 2011] [notice] Child 2200: Acquired the start mutex.
[Fri Jul 29 00:39:10 2011] [notice] Child 2200: Starting 64 worker threads.
[Fri Jul 29 00:39:10 2011] [notice] Child 2200: Listening on port 80.
[Fri Jul 29 00:39:10 2011] [notice] Child 3272: All worker threads have exited.
[Fri Jul 29 00:39:10 2011] [notice] Child 3272: Child process is exiting