Uso de “Virtual Hosts” en Mac OS X 10.5
Cuando se desarrollan sitios web es práctica normal guardar todo el desarrollo en una carpeta, la cual puede ser accedida de distintas maneras usando el servidor web incluido en el sistema (Apache).
La ubicación por omisión puede ser un poco problemática para trabajar, ya que solo un usuario con privilegios de administrador puede hacer modificaciones ahí (aunque ese tipo de usuario es el primero que se crea cuando se instala el sistema); un punto a favor de esa carpeta es que para accederla a través del servidor web su dirección es corta: http://localhost/proyecto1
Pero a veces el usuario del equipo no necesariamente es administrador del mismo (y aunque lo sea, es una buena medida de seguridad trabajar como un usuario sin privilegios), por lo que hacer modificaciones a la carpeta por omisión del servidor web no es posible; en esos casos es necesario utilizar la carpeta “Sites” (o “Web”) de cada usuario para guardar el proyecto en desarrollo. La dirección para acceder a la carpeta es un poco más larga: http://localhost/~usuario/proyecto1
Existe una tercera opción todavía más corta y adecuada si, por alguna razón el sitio en desarrollo debe estar en un primer nivel, sin directorios intermedios; algo como: http://proyecto1
Para lograr algo así es necesario utilizar una opción del Apache llamada “Virtual Hosts“, lo que le permite al servidor web responder a distintos nombres (y por lo tanto hospedar distintos sitios) en una misma dirección. De esta manera la carpeta con el sitio en desarrollo puede estar en casi cualquier lugar del disco duro, siempre y cuando sea accesible por el usuario bajo el cual corre el servior web, para asegurar que así sea, es adecuado seguir trabajando en la carpeta “Sites” (o “Web”).
En el archivo de configuración del Apache ubicado en /etc/apache2/extras/httpd-vhosts.conf, está lo necesario para activar el hospedaje virtual:
NameVirtualHost *:80
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/www/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"
CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log common"
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/www/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"
CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log common"
</VirtualHost>
Como el mismo texto del archivo indica, el primer bloque “VirtualHost” va a ser el comodín que el servidor usará para contestar todas las solicitudes que le lleguen, mientras que los subsecuentes serán las configuraciones que se utilicen según el nombre que se le asigne a cada una. Así por ejemplo con un proyecto almacenado en el directorio “Sites” la configuración quedará más o menos así (se han eliminado opciones por motivo del ejemplo, para más detalles hay que revisar el manual del Apache):
NameVirtualHost *:80
<VirtualHost *:80>
ServerName localhost
DocumentRoot "/Library/WebServer/Documents"
</VirtualHost>
<VirtualHost *:80>
ServerName proyecto1.com
DocumentRoot "/Users/usuario/Sites/proyecto1"
</VirtualHost>
Desafortunadamente eso no es todo, para que el servidor realmente pueda reponder a nuestras solicitudes para el nuevo nombre, son necesarias dos cosas: reiniciar al Apache y decirle a la computadora donde encontrar la dirección proyecto1.com.
Reiniciar el Apache se puede hacer de dos formas, la primera es apagando el “Web Sharing” en el panel “Sharing” en “System Preferences” y volviendo a activarlo unos instantes después. La segunda opción es mediante la Terminal, utilizando el comando sudo apachectl graceful (es necesario estar como administrador del sistema para poder ejecutar ese comando).
Indicacarle a la computadora dónde puede localizar al servidor proyecto1.com también es sencillo y, al igual que lo anterior, existen dos maneras de hacerlo: la fácil y la que aprueba Apple (también fácil, pero no tanto).
La manera fácil:
Usando nano en la Terminal o un programa como TextEdit, TextWrangler o BBEdit, es necesario modificar el archivo /etc/hosts y hacer que se parezca a algo como esto:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost127.0.0.1 proyecto1.com
El último renglón es el cambio a efectuar, lo demás es el contenido original del archivo, el cual no debe ser modificado. Como es de esperarse es necesaria la clave de administrador para modificar este archivo.
La manera oficial:
Esta manera de agregarle al sistema direcciones ficticias es la que Apple aprueba y permite otras funcionalidades que no se logran únicamente con modificar el archivo /etc/hosts. Para este fin existe una utilierá de nombre dscl. Para ver la lista de direcciones existentes se usa el comando de la siguiente manera:
dscl localhost -list /Local/Default/Hosts
En un sistema sin alteraciones el comando no va a mostrar nada, para agregar la modificación que se desea el comando toma la forma:
sudo dscl localhost -create \
/Local/Default/Hosts/proyecto1.com \
IPAddress 127.0.0.1
Para verificar que la información quedó bien:
dscl localhost -read /Local/Default/Hosts/proyecto1.com
AppleMetaNodeLocation: /Local/Default
IPAddress: 127.0.0.1
RecordName: proyecto1.com
RecordType: dsRecTypeNative:hosts
El paso final:
Sea por la manera fácil o por la oficial, el último paso es limpiar la caché de direcciones del sistema en la Terminal:
dscacheutil -flushcache
Después de todo esto lo último que falta por hacer es apuntar el navegador a la dirección http://proyecto1.com y revisar que el sitio aparezca en la ventana del navegador.