jueves, 19 de febrero de 2015

Configurar vhosts (virtual hosts) con xampp en mac


Solía tener linux mint en mi ultrabook y de tener apache instalado en el sistema operativo de la forma tradicional, junto con php y mysql, he pasado a tener una macbook air con os x el SO funciono perfecto desde que la prendí por primera vez y realmente no pude tener quejas.

Luego de jugar un rato para conocernos decidi comenzar a instalar las aplicaciones o servicios que utilizo frecuentemente una de ellas el apache. Buscando por internet supe que os x lo corre nativo tal como cualquier linux, pero esta vez quise algo diferente por eso instale XAMPP, si, me van a decir que estoy loco, pero preferí instalar el XAMPP en lugar del apache nativo por la simple razón de que cuando no este utilizado el apache simplemente apago el servicio y listo de forma muy sencilla.

Entonces descargue XAMPP, lo instale, probe el php y el mysql, también el phpmyadmin y la verdad es que no pude encontrar ninguna queja ni complicación ... hasta que quise crear un vhost (virtual host) para poder tener distintos proyectos paralelamente, y ese es el motivo de este post.

Que son los Virtual hosts?

Los virtual hosts le permiten al apache asignar un nombre de host a un directorio del sistema. Se pueden configurar tantos virtual hosts como necesitemos de esta forma lograremos que cada sitios web trabaje bajo su propio host.
Por ejemplo, es posible que queramos agregar minuevoproyecto.com en /Usuarios/miusuario/minuevoproyecto. Para probar nuestro sitio todo lo que tendríamos que hacer seria ingresar en "http://minuevoproyecto.com" desde nuestra navegador y listo.

Habilitar Virtual hosts

Lo primero que haremos sera abrir el archivo con nuestro editor de archivos favoritos
/Applications/XAMPP/xamppfiles/etc/httpd.conf y buscar la siguiente linea:

# Virtual hosts #Include /Applications/XAMPP/etc/extra/httpd-vhosts.conf

y descomentar la segunda linea borrando el carácter (#)  para que el apache comience a cargar el archivo de configuración de Virtual hosts.

# Virtual hosts Include /Applications/XAMPP/etc/extra/httpd-vhosts.conf

Crear tu Virtual host

Abra el archivo /Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf. En el final del archivo podremos ver algunos ejemplos de VirtualHosts, que se podrán borrar o comentar.

En la parte inferior del archivo, añadir un virtualhost 'localhost' como el dominio predeterminado. Lo primero que haremos sera abrir el archivo con nuestro editor de archivos favoritos:

# localhost <VirtualHost *:80> ServerName localhost DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs" <Directory "/Applications/XAMPP/xamppfiles/htdocs"> Options Indexes FollowSymLinks Includes execCGI AllowOverride All Require all granted </Directory> </VirtualHost>

Este paso es necesario para asegurar que http://localhost continue funcionando.
Ahora ya estamos listos para crear nuestros virtual host  justo abajo del virtual host de localhost:

# mi propio host <VirtualHost *:80> ServerName minuevoproyecto.com DocumentRoot "/Usuarios/miusuario/direccion/al/sitio" <Directory "/Usuarios/miusuario/direccion/al/sitio"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> ErrorLog "logs/minuevoproyecto.com-error_log" </VirtualHost>

En el ejemplo anterior se debe reemplazar "minuevoproyecto.com" con su propio nombre de host. Esto puede ser cualquier cosa que desee, pero asegúrese de elegir un nombre de host que no entre en conflicto con un nombre de dominio real. La ruta a su sitio web puede apuntar a cualquier directorio. Si la ruta incluye espacios, asegúrese de ponerlo entre comillas, como en el ejemplo.

Edite su archivo de hosts

Una vez que haya guardado los archivos httpd.conf y httpd-vhosts.conf, el siguiente paso es editar su archivo de hosts en OS X, para que el SO sepa que tiene que pedirle al apache que procese las peticiones de ese dominio. El archivo hosts es utilizado por OS X para mapear nombres de host en direcciones IP. En este caso queremos mapear su nuevo ServerName a la dirección IP 127.0.0.1, que es nuestro servidor local.

Arranque una instancia Terminal y teclee el siguiente comando:

sudo nano /etc/hosts

Escriba su contraseña de OS X cuando se le solicite, y el archivo de hosts se abrirá en el editor de archivos nano. Vera que el archivo hosts ya contiene algunas asignaciones de nombre de host por defecto (por ejemplo, "localhost 127.0.0.1"). Utilice las teclas de flecha del teclado para desplazarse a la parte inferior del archivo y añade su propio dominio:

# XAMPP VirtualHost mappings 127.0.0.1 minuevoproyecto.com

Guarde el archivo presionando CTRL + o, luego presione ENTER cuando nano le pregunte el nombre del archivo. Cierre nano con CTRL + x.

Reinicie el apache
Para que los cambios surgen efecto, reinicie el apache. Esto lo puede hacer desde la aplicación XAMPP.

Abra el navegador e ingrese su url http://minuevoproyecto.com o el nombre de dominio que usted haya elegido y debería ver su sitio web, sin embargo existe la posibilidad  que en su lugar se encuentre con un ...

Error 403

Debido a que Apache se ejecuta como el usuario 'nadie' de forma predeterminada, es posible que no tenga el permiso adecuado para navegar por el directorio de usuarios de OS X o algunos de sus subdirectorios, en cuyo caso verás un 'acceso prohibido error 403' cuando pruebe y vea su sitio de desarrollo. Del mismo modo, es posible que a pesar de que usted puede ver su sitio de desarrollo, PHP lanze errores cuando intente escribir archivos o hacer directorios del sistema de archivos. Para solucionar esto se puede configurar Apache para funcionar como su usuario OS X. Para ello abra /Applications/XAMPP/xamppfiles/etc/httpd.conf y buscar las siguientes líneas:

# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon

Cambie el usuario daemon por su usuario de OS X y guarde el archivo.

Reinicie el apache y deberia poder navegar su sitio sin ningun problema, incluyendo manipulacion de archivos y directorios usando PHP.