Cómo instalar un servidor web con Nginx + MySQL + PHP5 + APC + Spawn_FastCGI [4ta Parte: Nginx+PHP con SpawnFastCGI]

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+PHP con SpawnFastCGI:

Spawn_FastCGI:

Esto se puede decir que es lo que une a Nginx con PHP, o sea, aún cuando tengan el paquete PHP5 instalado si no tienen instalado y ejecutado Spawn_FastCGI cuando abran algún sitio en PHP el navegador les descargará el archivo, no les mostrará nada que el .php tenga programado pues el servidor no sabe cómo procesar archivos .php, es por ello que se hace imprescindible instalar y configurar Spawn_FastCGI.

Si usáramos Apache sería algo tan simple como instalar el paquete libapache2-mod-php5 pero como usamos Nginx deberemos instalar el paquete spawn-fcgi en su lugar. Además, en el tutorial les explicaré cómo crear un script de inicio del mismo en /etc/init.d/ para que puedan controlarlo con más comodidad.

1. Instalación:

Empezaremos por lo primero, instalar Spawn-FastCGI y PHP 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 spawn-fcgi php5-cgi php5-curl

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 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:

En el paso anterior (cuando instalamos Nginx) descargamos un archivo llamado nginx-spawn-fastcgi.tar.gz que al descomprimirlo nos creó la carpeta nginx-spawn-fastcgi en nuestro home, copiaremos de ella el archivo spawn-fastcgi hacia /etc/init.d/ :

cp ~/nginx-spawn-fastcgi/spawn-fastcgi /etc/init.d/

Además, necesitamos el ejecutable de php-fastcgi en /usr/bin/

cp ~/nginx-spawn-fastcgi/php-fastcgi /usr/bin/

Perfecto, ya tenemos listo el archivo que nos permitirá controlar a spawn-fastcgi y además el ejecutable de php-fastcgi, ahora vamos a iniciar spawn-fastcgi:

/etc/init.d/spawn-fastcgi start

Nos mostrará algo como: spawn-fcgi: child spawned successfully: PID: 3739

Ahora vamos a reemplazar nuestro archivo /etc/nginx/sites-available/mywebsite.net por ~/nginx-spawn-fastcgi/mywebsite_plus_php.net

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

¿Por qué? Simple, porque nuestro anterior archivo mywebsite.net no tiene soporte para PHP, o sea, es Nginx solamente, mientras que el archivo mywebsite_plus_php.net sí tiene soporte para PHP, o sea, Nginx+PHP usando SpawnFastCGI.

Las diferencias entre estos archivos son varias, por ejemplo:

  • En la línea 3 al archivo que soporta PHP se le agrega index.php
  • Una nueva línea bajo la No.3 que contiene: fastcgi_index index.php;
  • Varias otras líneas nuevas que le indican a Nginx cómo procesar PHP.
  • ….. en fin, les dejo acá una foto que les ayudará a conocer las diferencias entre ambos archivos:

nginx_mysql_spawn-fastcgi_comparing_mywebsite_confs

El archivo mywebsite_plus_php.net es un vhost que nos sirve de ejemplo, o sea y dicho de otra forma, debemos modificarlo 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)

Listo, ahora reiniciaremos Nginx:

/etc/init.d/nginx restart

Para comprobar que nuestro Nginx procesa adecuadamente PHP copiemos el archivo phptest.php hacia la carpeta hosteada, o sea, la que indicamos en la línea No.6 del archivo mywebsite_plus_php.net (por ejemplo, root /var/www/), suponiendo que tengan el sitio hosteado directamente en /var/www/ sería:

cp ~/nginx-spawn-fastcgi/phptest.php /var/www/

Suponiendo que en la línea 5 de nuestro mywebsite_plus_php.net (o sea, la línea de server_name) hayamos dicho que nuestro sitio es www.misitio.net entonces debemos acceder a www.misitio.net/phptest.php . O sea, la idea es acceder al archivo phptest.php desde nuestro navegador y si nos aparece lo siguiente entonces nuestro Nginx se enlazó perfectamente con PHP:

nginx_mysql_spawn-fastcgi_tersting_nginx_php

En caso de que no les aparezca esto, o sea, que el navegador les intente descargar el archivo .php … esto significa que algo hicieron mal, que no reemplazaron bien el /etc/nginx/sites-available/mywebsite.net con ~/nginx-spawn-fastcgi/mywebsite_plus_php.net … que se les olvidó reiniciar Nginx con /etc/init.d/nginx restart o bien que se les olvidó iniciar Spawn-FastCGI con /etc/init.d/spawn-fastcgi start

Hasta aquí el tutorial para enlazar Nginx con PHP usando SpawnFastCGI, ya solamente nos falta MySQL y APC 🙂

Espero les esté resultando interesante esto.


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.   F3niX dijo

    Si es cuarta parte porque la imagen dice 3? comenzó en 0 supongo? excelente post.

    Saludos

    1.    KZKG^Gaara dijo

      1ra: Presentación
      2da: Nginx
      3ra: Nginx+PHP (Spawn_FastCGI)

      🙂

      Gracias por leernos ^_^

      1.    Rodrigo dijo

        que paso con la 4 parte???
        y con los subsecuentes?????

  2.   rpayanm dijo

    Hola:

    Sería una mejor elección si en vez de mysql, utilizaras MariaDB, como debes saber este último es un fork del primero, y ya se habla de que será el Mysql del futuro (http://www.genbetadev.com/bases-de-datos/mariadb-sera-el-mysql-del-futuro) pues Mysql es libre, hasta cierto punto.

    SkySQL, una empresa que presta servicios a partir de bases de datos libres, apoyó económicamente al proyecto MariaDB (http://www.genbetadev.com/bases-de-datos/mariadb-y-skysql-unen-fuerzas-para-llevar-a-mariadb-a-lo-mas-alto) y Google que quiere dejar de depender de Mysql, como también hizo Wikipedia, y hará la transición desde MySQL 5.1 a MariaDB 10.0 con la ayuda, precisamente, de SkySQL, que son ya expertos en esta materia.

    Salu2.

    1.    KZKG^Gaara dijo

      Hola,

      Sí claro, conozco MariaDB y de hecho, hemos hablado ya al respecto: https://blog.desdelinux.net/tag/mariadb/

      No obstante, ahora mismo estoy usando MySQL pues estos tutoriales los hago desde la experiencia particular que tuve al migrar DesdeLinux (con todos sus servicios) hacia otros servidores, en ese momento cambiamos la tecnología completamente y las tareas o cambios que tuve que afrontar no fueron pocos.
      Lee este comentario mío de ese momento: https://blog.desdelinux.net/el-blog-desdelinux-abandona-hostgator-y-pasa-a-gnutransfer/comment-page-1/#comment-81291

      La idea final es sí en efecto, migrar a MariaDB, pero no he tenido tiempo para hacer las pruebas pertinentes 🙂

      Gracias por leernos

  3.   eliotime3000 dijo

    Este tutorial me va a servir para instalar zPanel X con NGINX para no saturar mi site a la hora de migrar al VPS de GNUPanel.

  4.   Dragnell dijo

    El regalo de navidad? Lo esperaba con ansias felicidades a todos.

    1.    KZKG^Gaara dijo

      Gracias socio 😀

  5.   St0rmt4il dijo

    Agregado a favoritos!

    Por cierto, tengo esta duda e interrogante, en verdad Nginx tiene mas performance que Apache?

    Saludos!

    1.    KZKG^Gaara dijo

      Bueno, Apache se puede optimizar mucho pero… hasta ahora, busca en Google y casi todos coincidimos que Nginx consume mucho menos RAM, tiene un rendimiento nada despreciable, aunque no es del todo tan simple a la hora de configurar.

  6.   Luis Morales dijo

    Buenas KZKG^Gaara excelente información para los que nos interesa este mundillo, una pregunta, para cuando el 4to post 😀