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:

nginx-sitio-de-prueba-puro-html

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


26 comentarios, deja el tuyo

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Nelson dijo

    Gracias, muy útil !

    1.    KZKG^Gaara dijo

      Gracias a tí por comentar

  2.   dhunter dijo

    En backports está nginx 1.4..

    1.    KZKG^Gaara dijo

      Sí, pero en un server en producción no uso nada de eso 😀

      1.    dhunter dijo

        Con «eso» te refieres a la última versión estable y probada que ha liberado nginx, lo haces sonar como si fuera un apt-pinning desde sid. ~_~

        1.    KZKG^Gaara dijo

          Ah venga, es que… en los servers nunca me ha gustado usar otros repos, ni backports ni nada así 🙂

      2.    Rafael Castro dijo

        Siempre estable en servidores, eso lo aprendí hace años.

        1.    dhunter dijo

          Nginx 1.4 es estable desde abril pasado, en backports está 1.4.1-3.

          2013-04-24

          nginx-1.4.0 stable version has been released, incorporating many new features developed in the 1.3.x branch – support for proxying of WebSocket connections, OCSP stapling, SPDY module, gunzip filter and more.

          http://nginx.org/en/CHANGES-1.4

          1.    Rafael Castro dijo

            Usted tiene razón en lo que dice, me quito el sombrero.

  3.   chinoloco dijo

    Gracias por compartir, actualmente estoy poniendo en practica tus post mas antiguos.
    Ya te voy a llenar a preguntas XD

    1.    KZKG^Gaara dijo

      Gracias por leernos 🙂
      Cualquier duda o pregunta ya sabes, estamos para ayudar, ahí tienes el foro.desdelinux.net donde entre todos te intentaremos dar la mejor solución

      Saludos

      1.    Gibran Barrera dijo

        Yo tengo una duda tengo LAMP [Linux (Debian Wheezy), Apache, PHP y MySQL] funcionando en mi servidor para WordPress y Owncloud, como migro a Ngnix, otra duda es que diferencia hay entre Ngnix y Lighttpd.

        1.    KZKG^Gaara dijo

          La mayor complicación o dificultad para migrar de Apache a Nginx son las configuraciones de cada sitio, o sea, específicamente los .htaccess que uses.

          Los .htaccess es lo más complejo a la hora de pasarte a Nginx, pues son configuraciones diferentes que debes poner en el VHost de Nginx.

          Sobre LightHTTPd y Nginx … no sé, usé LightHTTPd una sola vez hace muchos años, actualmente no tengo idea de cómo ande su desarrollo, específicamente usando PHP.

  4.   eliotime3000 dijo

    Bastante sencillo se ve el NGINX en comparación con el Apache. Esperando el próximo episodio para poder complementarlo con PHP

  5.   Mauricio dijo

    Yo esperando los tips para optimizar mas a nginx 😀

    Por cierto Gaara, podéis incluir en tu próximo tuto, como implementar soporte SSL.

    Saludos.

    1.    KZKG^Gaara dijo

      Los tips que vienen son en realidad para optimizar el procesamiento PHP, caché a sitios, puedo poner el ejemplo de la configuración que usamos en DesdeLinux para Nginx+Wordpress+W3_Total_Cache 🙂

  6.   kaiser dijo

    Gracias buen aporte.

  7.   abr4xas dijo

    Y la guia para archlinux cuando? xD

    1.    KZKG^Gaara dijo

      En Arch viene siendo muy parecido, solo cambian los nombres de los paquetes pero… la conf es casi idéntica

      Pero, ¿quién tiene un server en producción con Arch? 😀

  8.   abr4xas dijo

    Hi there,

    Soy yo de nuevo xD…

    Estaba siguiendo tus pasos aplicandolos en una maquina con archlinux y tengo el siguiente inconveniente:

    [abr4xas@Genius www]$ systemctl status nginx.service
    nginx.service - A high performance web server and a reverse proxy server
    Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
    Active: failed (Result: exit-code) since vie 2013-11-15 20:11:35 VET; 1min 13s ago
    Process: 1258 ExecStartPre=/usr/bin/nginx -t -q -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=1/FAILURE)

    Alguna sugerencia 😀

  9.   Rhiz dijo

    Jo… xox, yo solo quiero un servidor interno, es decir solo quiero remplazar xampp, ¿debo hacer todo esto?

    1.    KZKG^Gaara dijo

      Si lo deseas puedes implementar esto mismo (que repito, es con lo que funciona DL), de hecho mi servidor virtual (que uso para desarrollo y pruebas) lo tengo hecho con esto mismo que explico.

      O sea, puedes bien quitar XAMPP y poner esta variante y funcionará bien, o si lo deseas dejar XAMPP… igual te funcionará.

      El punto positivo de usar esto que muestro es el muy bajo consumo de hardware comparado con Apache, pero, en tu ordenador personal, que no es un hosting de alta demanda ni mucho menos… si XAMPP te funciona bien, no veo por qué quitarlo 🙂

  10.   Isaac dijo

    Ya tengo mi servidor Linux funcionando (Debian, Nginx, MySQL y PHP) me costo mucho trabajo hacer funcionar PHP con Nginx porque estaba acostumbrado a la forma sencilla de Apache Web Server.

    Bueno mi pregunta es: ¿Alguien sabe como puedo apuntar un dominio de prueba que he comprado a mi servidor? Me gustaria probar con mi dominio .com a ver que tal, pero no tengo la mas minima idea de como hacerlo, porque siempre he usado una direccion de NOIP Para acceder a el con el DUC de noip.

    Espero alguien pueda ayudarme, Gracias!

  11.   abraham dijo

    A mi me sale esto al tratar de conectarme a tu ftp:

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

    HTTP request sent, awaiting response… 404 Not Found
    2015-11-23 17:46:30 ERROR 404: Not Found.

  12.   Ryan dijo

    Tengo mi servidor en CentOS funcionando (Gunicorn, Nginx, PHP) me costo mucho trabajo hacer que funcionen pero el punto en el que me eh trabado es que la Página Web que quiero lanzar necesita la configuración del proveedor de dominio en este caso Go Daddy, así que en este punto no se como seguir.

  13.   Ricardo dijo

    me pudieran compartir los archivos de configuracion ya que no los puedo bajar por favor