Apache es un software del que ya hemos hablado aqui y también hablamos del concepto servidor web. Pero es momento de comprender un poco más de cómo está formado.

Específicamente Apache server es un programa y como tal tiene un directorio principal o varios donde almacena sus librerías, archivos, configuración, etc…

Algunas de las configuraciones para Linux son específicas para este curso siguiendo la instalación de la máquina virtual y apache sobre Linux.

Dependiendo de nuestro sistema operativo y método de instalación, podría estar todo dentro del mismo directorio, o tener directorios en distintas ubicaciones, pese a esto, sin importar donde estén los archivos de configuración, el funcionamiento sigue siendo el mismo.

Los directorios que más usaremos y por ende, los más importantes son:

  • Windows (XAMPP – Server Root): C:\xampp\htdocs |  Linux (Document Root): /var/www
    • Directorio en donde colocaremos subdirectorios por cada sitio web
  • Windows (XAMPP): C:\xampp\apache\modules | Linux: /etc/apache2/modules
    • Directorio donde están los módulos que extienden la funcionalidad de Apache, como mod_rewrite, mod_jk, mod_php, entre otros.
  • Windows (XAMPP): C:\xampp\apache\logs | Linux: /var/log/apache2/nombre-del-sitio (configuración específica para este curso, ver en la pestaña Práctica Linux)
    • Aquí encontrarán los «logs» que son archivos donde se registran los eventos o errores de los sitios.
  • Windows (XAMPP): C:\xampp\apache\conf\extra\httpd-vhosts  | Linux: /etc/apache2/sites-available
    • En este directorio configuraremos nuestros virtual host.
  • Linux: /etc/apache2/sites-enabled
    • Aqui veremos Links simbólicos de los Virtual Host habilitados. (no aplica para Windows).

Para Linux las ubicaciones son muy genéricas, es decir que casi siempre al instalar a través de repositorios las cosas estarán en el mismo lugar 🙂

Ahora que tenemos en mente donde están las cosas, comprendamos algunos de los conceptos en la siguiente pestaña (Apache – Config)

 

 

En este laboratorio vamos a configurar un dominio de forma local, para ello vamos a introducirnos en los conceptos básicos primero y posteriormente los vamos a aplicar.

VirtualHost

Configurar un VirtualHost con el nombre «dondepedro.com.ar» no nos hace dueños del dominio. Para que funcione públicamente en internet, ese dominio debe estar registrado, resolver a un DNS y estar delegado al servidor donde está configurado el Virtual Host.
Configurar un VirtualHost con el nombre «dondepedro.com.ar» no hará que mágicamente escribamos en el navegador y se resuelva el nombre que configuramos en Apache. Para ello debemos modificar un archivo local en nuestros equipos (Windows, Linux u OS X) que veremos más adelante.

VirtualHost es el nombre que se le da a la práctica de tener más de un sitio web en un solo equipo, también es el parámetro que configuraremos en Apache. Veámos algunos ejemplos:

  • www.midominiofalso.com
  • www.midominioreal.com.ar
  • www.undominioquesemecanta.tr
  • dominiosinextension
  • dominiosinwww.com
  • subdominio.dominio.com
  • https://dominio.com.ar
  • http://dominio.com.ar
  • dominio-con-guiones.com
  • d0m1nio-con-num3r0s.com
  • etc…

Es importante saber que, los sitios web pueden ser resueltos cada uno por su propia IP o por diversos nombres, entendiendo eso podríamos:

  • Nombre: dominio.com.ar
    • Alias: dominio
    • Alias:dominio.com
    • Alias: dominio.ar

Un ejemplo de esto:

Si visitan el sitio http://www.gooogle.com (con una «O» adicional) serán llevados a http://www.google.com, posiblemente http://www.gooogle.com es un Alias de google.com

(Teniendo un virtualhost para https://www.google.com)

Redirect permanent / https://www.google.com/

Si escribieramos en el navegador http://dominio, http://dominio.com, http://dominio.ar son todos nombres que pertenecen a dominio.com.ar, por lo tanto siempre iremos a dominio.com.ar.

Si fuese por IP, podríamos:

  • 172.25.100.10 -> dominio.com.ar
  • 192.168.0.1 ->  dominio
  • 10.20.65.30 -> elsitiodeflavio.com
  • etc…

Una explicación resumida de esto y documentación adicional la encontramos en el sitio web del producto.

Rewrite Rules

Las «rewrite rules» o «reglas de reescritura» son lo que traducen «reglas que reescriben cosas». Se nos permite usar la reescritura de reglas en Apache gracias a uno de sus módulos llamado «mod_rewrite».

Un ejemplo para entender el concepto sería algo como esto:

Visitando http://www.google.com/Analytics/ serán llevados a http://www.google.com/analytics/ (con la A minúscula)

La regla sería algo como:

Todo lo que sea /Analytics —> Reescribelo a —> /analytics

RewriteRule ^/Analytics$ /analytics/ [R,NC,L]

Los símbolos de » ^ » y » $ » son metacaracteres bien conocidos en el mundo de Unix, el primero llamado «potencia o acento circunflejo» se usa para determinar el comienzo de algo, mientras que el símbolo pesos hace lo contrario, indicar el final de algo. Aprenderás mucho más sobre éste tipo de cosas trabajando con Linux, aún estás a tiempo de instalar tu máquina virtual con Linux y ¡aprender mucho más!

Ya entraremos en más detalles con las reglas de reescritura en la práctica. Pero si lo desean, pueden aprender directamente de la fuente.

 

Laboratorio 01

Linux | Virtual Host: dominio.com.ar

Recuerda realizar un backup de los archivos «default» de la instalación. De ese modo podrás regresar a cambios anteriores si algo sale mal.

Primero vamos a configurar nuestra computadora para que resuelva el dominio que vamos a crear localmente y no a través del DNS nuestro proveedor. De ese modo visitaremos el sitio alojado en nuestro equipo y no algún otro que exista en Internet.

Modifica el archivo /etc/hosts con Vim de este modo con el usuario root:

# conviertete en root
su -

# modificar el archivo
vim /etc/hosts

# agregar esto:
127.0.0.1   dominio dominio.com.ar

# verificar los cambios con cat:
cat /etc/hosts

Ahora vamos a crear el directorio de nuestro sitio

#conviertete en root
su -

#crea el directorio
mkdir /var/www/dominio.com.ar

#crea un archivo HTML o copia alguno hecho (sin PHP por ahora)
vim /var/www/dominio.com.ar/index.html
#Agrega contenido al archivo, por ejemplo: <p> Hola Mundo </p>

#verifica que el archivo existe con el contenido creado:
cat /var/www/dominio.com.ar/index.html

#otorga todos los permisos al usuario que ejecuta apache:
chown -R www-data: /var/www/*

Crea el donde almacenarmos los logs:

#crea el directorio
mkdir /var/log/apache2/dominio.com.ar/

#dale permisos al usuario que ejecuta apache para escribir y leer en ese directorio:
chown -R www-data: /var/log/apache2/dominio.com.ar/

Ya está todo listo para crear nuestro primer VirtualHost, ve al directorio /etc/apache2/sites-enabled/ y crea el archivo 000-dominio.com.ar.conf, luego modifícalo con Vim y agrega este contenido:

<VirtualHost *:80>

 ServerName dominio.com.ar
 ServerAlias www.domminio.com.ar 
 ServerAlias domminio

 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/dominio.com.ar/ 

 <Directory />
 Options FollowSymLinks
 AllowOverride All
 </Directory>
 <Directory /var/www/dominio.com.ar/>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride All
 Order allow,deny
 allow from all
 </Directory>
 ErrorLog /var/log/apache2/dominio.com.ar/error.log
 CustomLog /var/log/apache2/dominio.com.ar/custom.log combined
</VirtualHost>

Ahora debemos habilitar el sitio para que esté disponible. Como verán, hemos creado un archivo en «sites-available» que traduciríamos «sitios-disponibles» pero no significa que esté activo. Para que esté activo debe existir un link simbólico (algo así como un acceso directo) en el directorio «sites-enabled» (sitios-habilitados) apuntando al archivo que creamos.

Hay dos formas de lograr esto, la más simple es usar el comando a2ensite, que te ofrecerá la lista de sitios disponibles para habilitar, la otra es crear un link simbólico a mano.

#cambiate al usuario root
su -

#ejecuta el comando "a2ensite"
$> a2ensite 000-dominio.com.ar

# O crea un link simbólico
$> cd /etc/apache2/sites-enabled
$> ln -s ../sites-available/000-dominio.com.ar 000-dominio.com.ar

Una vez esté listo tendremos que recargar la configuración de apache o reiniciarlo para que tome los cambios. Eso se logra con estos comandos que son bastante claros:

$> service apache2 reload
$> service apache2 restart
$> service apache2 start
$> service apache2 stop

O a través del script de inicio de apache:

$> /etc/init.d/apache2 reload
$> /etc/init.d/apache2 restart
$> /etc/init.d/apache2 start
$> /etc/init.d/apache2 stop

Ahora visita en tu navegador http://dominio.com.ar y deberías ver el archivo HTML que definiste en los pasos anteriores.

(En Linux he personalizado algunas cosas distinto a este tutorial, por ejemplo mi document root no es /var/www sino mi ‘home’ de proyectos.) pero si todo ha salido bien, el resultado final sería similar a este:

Resultado Final en Linux, Debian 8

Resultado Final en Linux, Debian 8

Laboratorio 01

Windows | Virtual Host: dominio.com.ar

Recuerda realizar un backup de los archivos «default» de la instalación. De ese modo podrás regresar a cambios anteriores si algo sale mal.

Lo que primero debemos hacer, es crear el directorio donde colocaremos el sitio web, para ello vamos a:

«C:\xampp\htdocs\» y creamos el directorio «dominio.com.ar» quedando como resultado: «C:\xampp\htdocs\dominio.com.ar\»

En este directorio copiaremos un archivo HTML que tengamos hecho o tal vez solo con: <p>Hola Mundo</p> como contenido (trata de no usar archivos PHP aún, aunque el módulo en XAMPP ya está activo, lo veremos más adelante).

Ahora, para que el DNS de nuestro proveedor no resuelva primero, alteramos el orden de resolución de nombres de dominio, para ello modificamos el archivo «C:\Windows\System32\drivers\etc» y agregamos esta línea

127.0.0.1 dominio dominio.com.ar

Un «shortcut / atajo» para llegar a este directorio de Windows es Inicio > Ejecutar: En la ventana que aparece escribir «drivers» sin las comillas y presionar enter, luego ingresar en el directorio etc y modificar el archivo ‘hosts’.

Con Windows, como mencioné en capítulos anteriores, iremos a: «C:\xammp\apache\conf\extra» y modificaremos el archivo httpd-vhosts.conf.

Sabías que httpd-vhosts.conf es resumido: «http daemon virtual hosts» http porque hablamos de Apache HTTP Server, Daemon que sería «demonio» ya que es un cocepto adoptado de Unix y Virtual Hosts, que ya lo vimos en la teoría. 

Una vez en el archivo, con tu editor de texto (preferiblemente Notepad++, Sublime) agrega esto:

<VirtualHost *:80>

 ServerName dominio.com.ar
 ServerAlias www.domminio.com.ar 
 ServerAlias domminio

 ServerAdmin webmaster@localhost
 DocumentRoot "C:\xampp\htdocs\dominio.com.ar"

 <Directory />
 Options FollowSymLinks
 AllowOverride All
 </Directory>
 <Directory "C:\xampp\htdocs\dominio.com.ar">
 Options Indexes FollowSymLinks MultiViews
 AllowOverride All
 Order allow,deny
 allow from all
 </Directory>
</VirtualHost>

 

El último paso es reiniciar apache, lo cual hacemos desde la interfaz de XAMPP, primero lo detenemos y luego lo inciamos:

reiniciar apache con xampp

reiniciar apache con xampp

Si tras detenerlo, apache no vuelve a iniciar verifiquen que no esté abierto Skype (que en Windows suele tomar el puerto 80) u otro programa conflictivo. También verifiquen que han copiado bien el Virtual Host y no han añadido ningún caracter raro, cualquier error en la sintaxis de los archivos de apache puede causar que no inicie.

Finalmente visita: http://dominio.com.ar y deberías ver el contenido del HTML que copiamos previamente.

Si hemos hecho todo bien, este será nuestro resultado final:

Resultado Laboratorio 01

Resultado Laboratorio 01

Si observan ambas prácticas, podrán notar que la de Linux es ligeramaente más amplia.

En Linux generalmente se hace indispensable ser más específico en las tareas pues se trabaja desde la línea de comandos y se debe conocer exactamente qué se hace, mientras que en Windows por ejemplo un botón detiene o hace andar «algo».

De todos modos, sin importar su sistema operativo en ambos casos llegamos al mismo resultado, publicar un sitio web de forma local sobre el cual estaremos trabajando en los próximos laboratorios.

Para habilitar el uso de PHP en nuestros archivos web, deberemos instalar el siguiente módulo:

libapache2-mod-php5server-side, HTML-embedded scripting language (Apache 2 module)

Puedes instalarlo de esta forma:

# conviértete en root
$> su -

# instala
$> apt-get install libapache2-mod-php5

Una vez este instalado, reinicia apache como hemos visto en capítulos anteriores, así se podrán utilizar archivos PHP.