Actualizando conocimientos de Apache 1.3 a Apache 2.2

Llevo utilizando apache desde hace bastantes años y he ido migrando de versiones mientras mantenía mi vetusto httpd.conf lleno de comentarios, copy&pastes y demás. Después de unos cuantos problemas con MySQL 5.0 y mis configuraciones de apache, pensé que apache2 podría ser una solución (también llamado a veces “huída hacia adelante” O:-D). Como precisamente lo que más me incomodaba de mi actual estado de configuración del apache era el caos organizativo, me sorprendió la facilidad con que en apache2 se resuelve tener una buena lista organizada de “sitios web” (“sites”, o “virtual hosts” en terminología apache 1.3) y lo elegantemente que se habilitan y deshabilitan los módulos. Este texto no pretende ser un tutorial, solamente una pequeña receta para migrar sitios web de apache 1.3 a apache 2.2 sin comerse mucho la cabeza 😀

 

Crear un VirtualHost en Apache 2

Los VirtualHost o hosts virtuales sirven para poder alojar varios sitios web en un mismo servidor de forma cómoda. En apache2 tenemos dos directorios importantes relacionados con este tema:

  1. sites-available: que contiene la configuración de todos los sitios o VirtualHost definidos en apache2.
  2. sites-enabled: que contiene enlaces a las configuraciones definidas en el directorio anterior, indicando cuáles de ellas están activas.

Dentro de sites-available tenemos la configuración del site por defecto, “default”, que podemos usar como plantilla para nuestros nuevos VirtualHosts.

Dicho esto, podemos crear un nuevo VirtualHost en apache2 siguiendo estos sencillos pasos

1) Hacemos una copia del VirtualHost por defecto:

cd /etc/apache2/sites-available
cp default pruebas

2) Editamos pruebas para cambiar el ServerName y el DocumentRoot, las variables que definen el nombre al que responderá este sitio y la ruta en disco a los ficheros de ese sitio, respectivamente. También estaría bien cambiar la directiva “Directory” para que en lugar de hablar de /var/www hable de la nueva ruta:

ServerName pruebas.dominio.org
DocumentRoot /var/www/pruebas/

<Directory /var/www/pruebas/>

 ...

</Directory>

3) Habilitamos el site, utilizando los comandos para habilitar y deshabilitar sites del apache2:

a2ensite pruebas

4) Recargamos la configuración del apache2:

/etc/init.d/apache2 force-reload

Los comandos para habilitar y deshabilitar sites y módulos en el apache2 tienen nombres bastante lógicos:

  • a2ensite: apache2 enable site, habilita sites.
  • a2dissite: apache2 disable site, deshabilita sites.
  • a2enmod: apache2 enable module, habilita módulos.
  • a2dismod: apache2 disable module, deshabilita módulos.

Habilitar SSL en Apache2

Para habilitar SSL en apache2 hay que seguir unos pasos bastante sencillos:

1) Editar el fichero ports.conf para que el apache2 escuche también el puerto de HTTP-SSL, el 443:

Listen 443

2) Habilitar el módulo de ssl, con la herramienta antes descrita:

a2enmod ssl

3) Crear un nuevo site en sites-available

cd /etc/apache2/sites-available
cp default ssl

4) Modificar el site “ssl” para que escuche en el puerto 443 y que funcione con SSL

NameVirtualHost *:443
<VirtualHost *:443>
       SSLEngine on

5) Crear un fichero de configuracion en /etc/apache2/conf.d/ssl-local indicando dónde residirá el certificado x509 para el cifrado SSL:

SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/apache2/certs/server.crt
SSLCertificateKeyFile /etc/apache2/certs/server.key

6) Crear el certificado x509 para SSL, mediante openssl:

mkdir /etc/apache2/certs
openssl req -new -x509 -nodes -out server.crt -keyout server.key
mv server.key server.crt /etc/apache2/certs

NOTA: con esta llamada a openssl estamos creando un certificado autofirmado, que puede estar bien para sitios personales o de prueba, pero que es claramente un poco chapucero para sitios comerciales u oficiales. Para estos sitios se recomienda crear no un certificado sino una solicitud de certificado y enviarla para que sea firmada por una de las Entidades Certificadoras reconocidas por la mayoría de navegadores.

7) Habilitar el sitio ssl:

a2ensite ssl

8) Recargar la configuración del apache2:

/etc/init.d/apache2 force-reload

Bueno, pues esto es todo. No quería hacer un extenso manual de configuración del Apache 2, sino simplemente tener una receta de cómo migrar cómodamente nuestras configuraciones de Apache 1.3 a Apache 2.2. Espero haber cumplido mi objetivo 😉

13 pensamientos en “Actualizando conocimientos de Apache 1.3 a Apache 2.2

  1. meneame.net

    Actualizando de Apache 1.3 a Apache 2.2

    Artículo en el que se explica la estructura de directorios en la nueva versión de Apache, la forma de habilitar y deshabilitar módulos y sitios (o VirtualHosts) y cómo actualizar tus ficheros de configuración del Apache 1.3 a la 2.2 sin muchos…

    Responder
  2. Gerard

    Esta bien este articulo, solo una duda:
    "Para estos sitios se recomienda crear no un certificado sino una solicitud de certificado y enviarla para que sea firmada por una de las Entidades Certificadoras reconocidas por la mayoría de navegadores."

    Algun sitio donde lo hagan? es gratuïto ?

    Responder
  3. txipi

    @Gerard: Si quisiéramos que nos firmara nuestro certificado una entidad certificadora (una CA, en términos técnicos), deberíamos crear una petición de firma de certificado (request) que enviaríamos a la CA para que nos la devolviera firmada, como explican, por ejemplo en http://www.madboa.com/geek/opens...

    Si la solicitud la haces a Verisign o cualquier CA reconocida por el 99% de los navegadores, no será gratuito.

    En http://www.cacert.org/ tienes una CA gratuita que te puede firmar tu certificado, pero no sé si está soportada por la mayoría de navegadores.

    Responder
  4. Iker Sagasti Markina

    Muy buena la receta txipi. Solo puntualizar que los comandos que comentas solo son válidos para Debian-way ;-). Son scripts específicos de Debian. Al igual que los directorios para módulos disponibles y módulos cargados. No estaría de más resaltar este detalle 😉

    Responder
  5. txipi

    @Iker: Buen apunte, con tanto Debian-centrismo me olvido de que las diferentes distros no usan www-data como usuario de apache, o que algunas herramientas solo son scripts que vienen con el paquete .deb. Supongo que, como casi siempre, todo lo que esté disponible en Debian, lo está también para (*)Ubuntu.

    Responder
  6. Iñaki Baz

    Aupa, sólo una pequeña aportación ya que a mí me trajo por el camino de la amargura hasta que descubrí la causa:

    ¿Qué ocurre si alguien introduce directamente la IP en el navegador?, ¿a qué dominio virtual irá? ¿o acaso irá al default por no tener un ServerName asociado?

    Bueno, pues la respuesta es que en ese caso se accede al primer dominio virtual por orden alfabético tal y como aparecen en /etc/apache2/sites-enabled.
    Ojo, precisamente por esa razón el link a "default" se llama "000-default", para que sea el sitio por defecto para todos los dominios o IP’s que resuelvan a nuestro servidor web.

    PD: Y ya puestos, apunto también la existencia de "ServerAlias" para añadir más dominios a un dominio virtual, en plan:
    ServerName dominio.org
    ServerAlias http://www.dominio.org web.dominio.org

    Nada, sólo eso, felicidades por el artículo.

    Responder
  7. txipi

    @ibc: muchas gracias por tu aportación, dos detalles muy importantes. La verdad es que desconocía por qué se ponía el "000-" delante del link a default, pero ahora entiendo claramente la razón. Thx!! 😉

    Responder
  8. pillo

    Muchas gracias por este manual.

    Estuve 1 semana intentando hacer virtual host con apache 2.2.3 según el manual oficial de APACHE2 no viene este ejemplo tan simple, venia el modificar el /etc/apache2/httpd.conf y no iba ni a tiros.
    Muchas gracias.

    Responder
  9. Juan Carlos Badillo Goy

    Saludos.

    Muy bueno el tutorial, lo utilicé como guía y funcionó el acceso muy bien, pero luego que estoy en la aplicación muchos de los link de las imagenes y de algunas páginas no me funcionan, incluso me percaté que no me muestra las imagenes en formato jpg, solo me muestra las que tengan extensión png y gif, les pongo un ejemplo de como tengo los link relativos.

    Estos ejemplos de direcciones cuando se accedes a ellos no funcionan y este es el resultado del link resuelto por el navegador http://www.misitio.com/php/cerrar.php, y este es el error que emite:

    Este error (HTTP 404 No encontrado) significa que Internet Explorer se pudo conectar al sitio web, pero no encontró la página solicitada. Es posible que la página web no esté disponible temporalmente o que el sitio web haya cambiado o quitado la página web.

    En el caso de las imagenes sencillamente no logro mostrarlas.

    Muchas gracias y si alguien puede ayudarme puede escribirme a jcbadillogoy@gmail.com

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *