Noticia Cómo instalar un servidor web con Nginx + MySQL + PHP5 + APC + Spawn_FastCGI [2da Parte: Nginx]

Hace un tiempo les hablé sobre esta serie de tutoriales, sobre cómo instalar y configurar un servidor para hosting de alta demanda. Este artículo tratará sobre instalar y configurar Nginx:

Nginx:


Ya les hablamos de Nginx antes en el artículo Nginx: Una interesante alternativa a Apache, ahí les comentamos que es un servidor web como Apache, LightHttpd o Cherokee, pero que comparado con Apache destaca por su rendimiento y bajo consumo de hardware, precisamente por eso es que muchos sitios grandes como Facebook, MyOpera.com, DropBox o inclusive WordPress.com usan Nginx en vez de Apache. En el mundillo de Linux DesdeLinux no es el único que usa Nginx, hasta donde sé, emsLinux y MuyLinux también lo usan :)

Mi experiencia personal con Nginx data de hace varios años, cuando por necesidad empecé a buscar alternativas ligeras a Apache. En ese momento Nginx iba por la versión 0.6 y su compatibilidad con sitios de alta demanda hechos en PHP no era la más óptima, no obstante hoy en día desde la versión 0.9 en adelante (v1.2.1 disponible en Debian Stable, v1.4.2 disponible en ArchLinux) ha mejorado muchísimo, a tal punto de que con una adecuada configuración y unión de Nginx + PHP todo funcionará a las mil maravillas.

En esta serie de tutoriales usaré la versión 1.2.1-2.2 de Nginx, disponible en los repos Stable de Debian (Wheezy).

Este tutorial trata única y exclusivamente sobre Nginx, no sobre Nginx+PHP, la unión de Nginx+PHP así como su optimización o configuración necesaria será abordado en el próximo tutorial
1. Instalación:


Empezaremos por lo primero, instalar Nginx desde nuestros respositorios.

Todos los comandos que se ejecutarán son ejecutados con permisos de root, bien poniendo sudo al inicio de cada línea o bien estando loggeados como root

Si en tu servidor usas una distribución como Debian, Ubuntu o algún derivado en la terminal debes poner lo siguiente y presionar Enter :

aptitude install nginx

aptitude no viene instalado por defecto en Ubuntu, sin embargo recomiendo que lo instalen y usen en vez de apt-get, pues aptitude hace una mejor gestión de las dependencias en determinadas ocasiones

En caso de que uses otra distribución en tu server como CentOS, Red Hat, Fedora, simplemente instalen desde el respositorio oficial el paquete: nginx

En lo personal no recomiendo ningún derivado de Debian, ni siquiera Ubuntu para servidores, a lo largo de los años mis experiencias no han del todo satisfactorias. Mi primera opción para sistema operativo de servidores es Debian, luego pensaría en CentOS, por último en algún BSD
2. Configuración:


Ya tenemos instalado Nginx, pero necesitamos obviamente configurarlo. Les he preparado un archivo comprimido en el FTP el cual contiene todas las configuraciones que se usan en los servidores de DesdeLinux, tanto para PHP, Nginx, etc. Vamos a descargar y descomprimir ese archivo:

cd ~ && wget http://ftp.desdelinux.net/nginx-spawn-fastcgi.tar.gz && tar xf nginx-spawn-fastcgi.tar.gz

Esto nos creará una carpeta llamada nginx-spawn-fastcgi, de ella necesitaremos para Nginx puro (o sea, sin enlazarlo a PHP) dos archivos:

  • nginx.conf -» Archivo principal de configuración de Nginx (hablaremos más adelante de su contenido)
  • index.html -» Un simple archivo html que usaremos para ver si de veras Nginx nos funciona en su forma más básica
  • mywebsite.net -» Archivo de configuración para un sitio web simple, un VHost (Virtual Host) que configurará el acceso al anterior html

Primero vayamos a movernos hacia la carpeta de configuraciones de Nginx:

cd /etc/nginx/

Luego quitemos su configuración por defecto y pongámosle la nuestra:

mv nginx.conf nginx.conf_BK && cp ~/nginx-spawn-fastcgi/nginx.conf ./

Este como ya dije, es el archivo principal de configuración de Nginx, en él he definido ya lo siguiente:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

Usuario de acceso al sistema de archivos (con el cual nginx accederá a todos lados), cantidad de procesos para trabajar y además el PID (id de proceso de nginx).

También tenemos ahí un pequeño bloque llamado events (configuraciones para eventos) que contiene una línea que indica la cantidad de conexiones máximas permitidas por evento. Más abajo está el bloque llamado http.

Este bloque http es el que contiene casi todo lo relacionado con el hosting, al menos muchas cosas que les interesarán. Por ejemplo el tiempo de vida o de espera máximo (timeout), dónde estarán nuestros logs generales (access.log y error.log), compresión de datos usando gzip, así como otras reglas que podrían serles de utilidad en el futuro.

Una vez puesto en su sitio el archivo principal de configuración, copiemos el archivo de nuestro VHost hacia la carpeta sites-available

cp ~/nginx-spawn-fastcgi/mywebsite.net sites-available/

Además, debemos hacer un enlace simbólico de este archivo hacia la carpeta sites-enabled.

ln -s /etc/nginx/sites-available/mywebsite.net /etc/nginx/sites-enabled/

Les explico la utilidad de tener sites-enabled y sites-available.


Se encontrarán momentos en que deben tener listos y configurados varios archivos vhost, pues en ese servidor pondrán online digamos 5 sitios. No obstante, sucede que aún no es el momento para habilitar 2 de esos 5 vhosts, pero deben tener preparados los archivos para que cuando sea necesario estén online en el menor tiempo posible. Pueden poner cuantos vhosts deseen en sites-available (sitios-disponibles), pues los que Nginx lee para poner online son solo los de sites-enabled (sitios-habilitados), funcionaría también en sentido inverso, en caso de que deseen poner offline (temporalmente por ejemplo) un sitio, no hay necesidad de borrar archivos de su servidor (archivos que necesitaremos en otro momento), simplemente eliminamos el enlace simbólico de sites-enabled y listo. La utilidad de tener enlaces simbólicos y no simplemente copiar el archivo de una carpeta a otra, es que cuando deseemos editar un vhost, no importa si editamos al que está ubicado en enabled o available, al final es un mismo
archivo.

El archivo mywebsite.net como había dicho antes, un vhost que nos sirve de ejemplo, o sea y dicho de otra forma, debemos modificar mywebsite.net y establecer nuestras configuraciones.

Debemos cambiar lo siguiente:

  • access_log (línea 3): Esta será la ruta del archivo de log de acceso a este sitio
  • error_log (línea 4): Esta será la ruta del archivo de log de errores a este sitio
  • server_name (línea 5): La URL, dominio que está hosteado en esa carpeta, por ejemplo, si se tratase del foro de DesdeLinux sería: server_name foro.desdelinux.net
  • root (línea 6): La ruta a la carpeta donde están los archivos html, esto dejémoslo en /var/www/ pues solo será una prueba
Obviamente deben tener apuntando en sus registros DNS de su proveedor de hosting (usando CPanel u otra herramienta) que el dominio o subdominio declarado en server_name está ubicado en la IP de este servidor que están configurando. O sea, en el DNS donde crean subdominios para su dominio deben declarar que el dominio o subdominio que hayan puesto en la línea 5 se encuentra en este servidor (este servidor = la dirección IP del server en cuestión)

Ya solo falta copiar el archivo html hacia la carpeta que definimos en nuestro archivo de VHost, /var/www/ :

mkdir /var/www/ && cp ~/nginx-spawn-fastcgi/index.html /var/www/

Luego reiniciamos Nginx y listo:

service nginx restart

Y listo, nos aparecerá algo como esto:





Les recuerdo que estamos trabajando primeramente con Nginx para HTML, sin tener soporte para PHP, esto de instalar PHP y enlazarlo a Nginx será el contenido del próximo tutorial (en pocos días, lo prometo).

En fin, este es el tutorial de instalación y configuración de Nginx para que trabaje puro, o sea, un sitio HTML, espero les sea de interés.

Aclararé que sí, aún hay mejores prácticas que se pueden poner en uso, no obstante esperemos a terminar esta serie de tutoriales y luego evaluaremos el resultado final del trabajo ;)

Saludos


1i6No9jBGhk


Continúar leyendo...