Nginx

Por | 2017-01-10T16:18:46+00:00 12/10/2014|Sysadmin|26 Comentarios

Internet es cada vez más grande y cada día aparecen miles de páginas webs donde se publican millones de contenidos cada día, pero, lo curioso de todo esto es que todos estos contenidos no crean un exceso de oferta de contenidos, sino que la demanda aún está muy por encima de la oferta.

Todos los sitios web de Internet funcionan sobre servidores web y más de 30 millones de sitios web de internet se encuentran desarrollados en PHP, por lo que necesitan un servidor web capaz de ejecutar PHP y servir paginas HTML.

A principios de 2014 Apache continuaba liderando el porcentaje de uso, pero poco a poco su porcentaje de uso desciende a favor de Nginx, un servidor web también opensource y multiplataforma que tiene apenas 10 años de desarrollo, pero que ha conseguido mucha más eficiencia en el consumo de recursos y en la velocidad de respuesta al servir contenidos.
Aun así, Apache tiene un 60% de porcentaje de utilización, mientras que Nginx tiene el 20%, seguido por Internet Information Services (IIS).

nginx

Nginx además de ser un servidor web ligero de alto rendimiento, también es un excelente proxy inverso para contenido web o para protocolos de correo electrónico como por ejemplo IMAP o POP3.
La primera versión de Nginx apareció en Octubre de 2004 y actualmente este servidor web ya se encuentra en una versión más que estable, y esto ha hecho que muchos grandes sitios de Internet como por ejemplo WordPress.com o SourceForge, hayan decidido abandonar Apache como servidor web y pasarse a Nginx como servidor web principal.

La principal ventaja de Nginx como servidor web es que consume muchos menos recursos al servir contenido estático, y esto convierte a Nginx en una excelente opción para funcionar como proxy inverso o como balanceador de carga para otros servidores como Apache, optimizando la entrega de contenidos.
Lo que hace que Nginx sea diferente a otros servidores web es su arquitectura, que permite responder a millones de peticiones por segundo aprovechando al máximo los núcleos o hilos de ejecución del servidor con una configuración muy simple.

En Raiola Networks utilizamos Nginx como servidor web siempre que podemos, ya que la única carencia que encontramos es la imposibilidad de usar archivos .htaccess para modificar la configuración y el comportamiento del servidor web para un determinado sitio web.
Creemos que Nginx es una solución mucho más optimizada que Apache y Lighttpd para servir contenido de la forma más eficiente posible, además si combinamos Nginx con PHP-FPM conseguiremos eficiencia al ejecutar scripts PHP.

 

Nginx Vs Apache

La principal diferencia entre Apache y Nginx (y la más grande) es su arquitectura, mientras que Apache abre un montón de procesos para servir peticiones, Nginx abre solo los hilos de ejecución justos y necesarios permitiendo servir millones de peticiones en un corto espacio de tiempo, ya que no requiere tiempo adicional para abrir nuevos procesos y además al no abrir nuevos procesos tampoco consume mas memoria RAM.

La diferencia de rendimiento entre Nginx y Apache se nota, ya que el tiempo de respuesta conseguido por Nginx es casi un 150% más rápido que en el caso de Apache.

En el siguiente grafico puedes ver un gráfico de comparación de tiempo de respuesta entre Nginx y Apache:

nginx

Y en el siguiente gráfico puedes ver un gráfico donde puedes apreciar el consumo de memoria RAM en el servidor de Apache y de Nginx:

nginx

Como puedes ver en estos gráficos, con Nginx conseguimos mucha más eficiencia a la hora de servir contenidos y aprovechamos mejor los recursos, además la configuración de Nginx es mucho más sencilla que la configuración de Apache.

La única razón por la que Apache supera la cuota de mercado de Nginx es porque la primera versión de Apache apareció en 1995, mientras que la primera versión de Nginx apareció en 2004, por lo que es normal que este mucho más extendido Apache que Nginx.
Al estar más extendido muchas aplicaciones web y scripts aseguran compatibilidad total para Apache, pero en Nginx y otros navegadores web puede ser necesario realizar modificaciones para adaptar el funcionamiento.

 

Nginx con PHP-FPM

La mayoría de los servidores web que utilizan Apache, usan mod_PHP para ejecutar los scripts PHP ya que por comodidad es el intérprete integrado en Apache y permite ejecutar código PHP con Apache sin necesidad de llamar a procesos externos independientes.
La principal ventaja de mod_PHP es que es fácil de configurar junto con Apache, además al estar integrado en Apache podremos actualizar fácilmente la versión de PHP, pero la principal desventaja de mod_PHP es que consume demasiada memoria.

Aquí es donde entra en juego PHP-FPM, una alternativa a FastCGI como intérprete de PHP que consume mucha menos memoria al procesar código PHP y además funciona de forma independiente al servidor web, mediante el uso de procesos externos y sockets para funcionar.
PHP-FPM es un proyecto relativamente joven, pero con un gran futuro ya que nos ofrece la escalabilidad que no nos ofrece mod_PHP consiguiendo separar el servidor web del interprete PHP.

Nginx y PHP-FPM hacen una pareja perfecta, consiguiendo un rendimiento impresionante incluso al procesar código complejo, además PHP-FPM ofrece muchas más opciones de configuración que cualquier otro interprete.
Podemos considerar que la combinación de Nginx y PHP-FPM es una configuración de alto rendimiento ya que podemos conseguir tiempos de respuesta imposibles de conseguir con cualquier otra configuración de servidor web e intérprete de 2.

Aunque la conexión mediante sockets de Nginx con los procesos de PHP-FPM (127.0.0.1:9000) puede parecer más lenta, es posible optimizar la comunicación usando UNIX Domain Sockets en lugar de TCP Sockets, con esto reduciremos las latencias en las comunicaciones unas milésimas de segundo que pueden llegar a notarse si el tráfico es muy intenso.

Un OPCode Cache para PHP también mejora bastante el rendimiento de Nginx con PHP-FPM.

 

Nginx como proxy inverso

Cuando no podemos prescindir de Apache como servidor web por razones de configuración o necesidades del script PHP pero queremos disfrutar de las ventajas de Nginx al servir contenido estático podemos optar por usar Nginx como proxy inverso para otro servidor web como Apache.

El funcionamiento de Nginx como proxy inverso para Apache es simple: Nginx sirve los contenidos estáticos (imágenes, css, javascript, etc…) mientras que Apache se encarga de servir el contenido dinámico siendo además el encargado de procesar los scripts PHP.

El esquema de funcionamiento de Nginx como proxy inverso para Apache es el siguiente:

nginx

Usar Nginx como proxy inverso además nos permite utilizar otras funcionalidades de Nginx.

 

Nginx para cache de sitios web

Nginx puede llegar a comportarse como Varnish a la hora de cachear contenidos de páginas web para servirlas de forma rápida y con un consumo de recursos mínimo.
El funcionamiento de Nginx como cache puede ser muy parecido al de cualquier plugin de cache para WordPress, pero al servir el cache de forma nativa sin necesidad de procesar código PHP conseguimos unos tiempos de respuesta muy bajos y un consumo de recursos casi nulo.

El funcionamiento de un HTTP Cache se puede ver en el siguiente esquema:

nginx

Normalmente los archivos de cache de Nginx se almacenan en un directorio temporal del servidor a diferencia de Varnish, en el que los archivos de cache se guardan en la memoria RAM del servidor para bajar aún más los tiempos de respuesta.
Pero esto es fácilmente solucionable utilizando Memcached para guardar los datos de cache de Nginx, esto es posible al utilizar el modulo para Memcached de Nginx.

Quizás los tiempos de respuesta de Nginx + Memcached sean superiores a los de Varnish + Nginx o Varnish + Apache, pero con Nginx + Memcached podemos llegar a construir infraestructuras muy escalables para grandes sitios web con un volumen de tráfico de millones de peticiones por minuto.

 

Nginx para balanceo de carga

Podemos utilizar Nginx como balanceador de carga, una forma interesante de balancear el tráfico entrante entre varios servidores web.
Para configurar Nginx como load balancer debemos utilizar el modulo “Upstream Module” de Nginx y configurarlo para enviar tráfico a varias direcciones internas que corresponderán con diferentes servidores web.
Aunque la configuración del balanceador de carga puede llegar a ser muy avanzada si utilizamos Nginx Plus, en la versión opensource también podremos realizar algunas configuraciones interesantes como por ejemplo definir el peso de cada servidor web o configurar algunas directivas adicionales que nos ayudaran a realizar una correcta administración del balanceo de carga.

Podemos configurar Nginx para que envié el tráfico a uno u otro servidor web dependiendo del estado de cada uno de los servidores web y la carga de tráfico que estén soportando en un momento concreto.

 

Nginx PlusGINX PLUS

Es posible encontrar una versión de Nginx Premium llamada Nginx Plus que añade algunas funcionalidades a la versión convencional opensource.
Entre las funcionalidades extra de Nginx Plus destacan la capacidad de balancear la carga entre varios servidores de aplicación (o aplicaciones web), la capacidad nativa de comprobar que el servicio se esté ofreciendo correctamente a los visitantes o usuarios y la capacidad de ofrecer Live Streaming mediante HTTP.

nginx

Las ventajas de Nginx Plus para usuarios normales y corrientes que utilicen Nginx para sitios web ni se notan, ya que es muy posible que no necesites capacidades de reconfiguración de balanceo de carga al vuelo y en caliente.

Nginx Plus también te permitirá tener soporte por parte de los ingenieros desarrolladores de Nginx y podrás tener acceso a los servicios profesionales ofrecidos por los desarrolladores de Nginx.

 

Nginx con cPanel

cPanel es uno de los paneles de control de hosting más utilizados actualmente para todo tipo de servidores web, pero en su ansiada búsqueda de la estabilidad total y compatibilidad total, aún no han implementado soporte nativo para Nginx, ni como servidor web ni como proxy inverso.

Existen varias formas de implementar Nginx en cPanel mediante módulos para WHM&cPanel:

  • NginxCP: Se trata de un módulo completamente gratuito para utilizar Nginx como servidor web (sin Apache) en servidores con cPanel, con esto conseguiremos compatibilidad total con Nginx a través del panel de control WHM y compatibilidad total con la reescritura de URL.
  • CPNginx: Es una extensión para cPanel&WHM de pago que también nos permite implementar Nginx como servidor web en cPanel, aprovechando las ventajas que nos ofrece Nginx y además incorpora un módulo para WHMCS.
  • cpXstack: Este módulo nos permite implementar el stack Nginx + PHP-FPM en nuestro servidor web cPanel. Con cpXstack conseguiremos tiempos de acceso mucho menores entre otras mejoras.

Es posible que dentro de un par de años cuando Nginx se vaya extendiendo cada vez más, algunos paneles como cPanel implementen este servidor web de forma nativa, como ya ha hecho Parallels Plesk implementando Nginx como proxy inverso.

 

Nginx y WordPress

Poco a poco los gestores de contenido desarrollados en PHP van consiguiendo ser compatibles con Nginx, WordPress es compatible con Nginx e incluso existen plugins para controlar el “cache manager” de Nginx o para controlar el proxy inverso.

Con Nginx como proxy inverso conseguimos tiempos de respuesta muy superiores al utilizar WordPress, pero además si utilizamos Nginx + PHP-FPM conseguiremos mejorar los tiempos de respuesta al procesar el sitio web.
Con Nginx + PHP-FPM conseguiremos servir millones de peticiones por minuto en sitios web y blogs creados con WordPress, y sin una infraestructura técnica demasiado cara.

El único problema o incompatibilidad que pueden llegar a tener Nginx y WordPress es que él .htaccess de WordPress no va a funcionar en Nginx y para que funcionen algunos plugins y las reescrituras de URL necesitaremos realizar las modificaciones en la configuración de Nginx.

Si necesitas ayuda para implementar Nginx en un servidor web o para utilizar WordPress junto con Nginx y asegurar un correcto funcionamiento puedes contactar con nosotros y te informaremos sin compromiso.

 

VPS Optimizados de Raiola Networks

En Raiola Networks ofrecemos servidores VPS optimizados que llevan Nginx como proxy inverso y como cache dinámico para Apache, además implementamos Zend OPCache como OPCode Cache para PHP y Memcached como cache de objetos.
Algunos servidores VPS optimizados con 4 GB de memoria RAM están sirviendo 500.000 visitas al día y 4000 visitantes concurrentes al mismo tiempo de forma continua, además, nuestros VPS optimizados se encuentran especialmente orientados a sitios web WordPress.

Si necesitas más información sobre los servidores VPS optimizados con VestaCP de Raiola Networks puedes contactar con nosotros sin compromiso y te informaremos.

 

 

[Total: 8 Promedio: 4.5]

About the autor:

Mi nombre es Alvaro Fontela, soy consultor Wordpress y blogger activo desde hace años. Co-Fundador de Raiola Networks, escribiendo sobre Wordpress en este blog día tras día.