Características y Ventajas de Nginx
Nginx destaca por su configuración flexible y sencilla, ofreciendo un alto rendimiento en manejo de concurrencia, especialmente para archivos estáticos de pequeño tamaño. Con un bajo consumo de recursos, puede gestionar hasta 20,000 conexiones simultáneas utilizando solo 10 procesos de trabajo y unos pocos cientos de megabytes de memoria. Su arquitectura soporta múltiples funciones como servidor web, caché y proxy, aunque cada una está optimizada para escenarios específicos. A diferencia de Apache, que utiliza el modelo select, Nginx emplea el modelo epoll, lo que le permite escalar eficientemente bajo cargas elevadas. Además, integra capacidades para limitar velocidades por IP y restringir el número de conexiones.
Comparación entre LNMP y LAMP
LNMP (Linux, Nginx, MySQL, PHP) y LAMP (Linux, Apache, MySQL, PHP) representan stacks de tecnologías para alojar aplciaciones web. La principal diferencia radica en el servidor HTTP: Nginx en LNMP se optimiza para manejar conexiones concurrentes de manera asíncrona, mientras que Apache en LAMP utiliza un modelo basado en procesos o hilos. Esto hace que LNMP sea preferido en entornos con alta demanda de solicitudes estáticas o de proxy inverso.
Escenarios de Aplicación
Nginx es ideal como servidor estático para alojar imágenes, videos, HTML, JavaScript, CSS y archivos FLV, alcanzando entre 10,000 y 30,000 conexiones concurrentes. Para contenido dinámico, se combina con FastCGI para ejecutar scripts en PHP o JSP, soportando entre 500 y 1,500 solicitudes concurrentes. También funciona como proxy inverso y balanceador de carga para sitios con hasta 20 millones de páginas vistas diarias. Adicionalmente, se emplea como servidor de caché para mejorar el rendimiento.
Configuración de Hosts Virtuales
Cada bloque server en la configuración define un host virtual. Existen tres métodos para diferenciarlos: basado en dominio (para sitios web públicos), basado en puerto (para interfaces administrativas o sitios internos) y basado en IP (poco común, ya que Nginx no soporta alias de interfaz de red en algunos sistemas). Para implementar hosts virtuales por dominio, se especifica el nombre del servidor y la raíz del documento correspondiente.
Proceso de Instalación
Primero, descargar el código fuente desde la página oficial de Nginx. A continuación, instalar dependencias como PCRE para soporte de reescritura HTTP y OpenSSL para conexiones seguras. Luego, crear un usuario del sistema sin perimsos de inicio de sesión para ejecutar Nginx. Descomprimir el paquete y compilarlo con parámetros específicos para habilitar módulos como el de estado y SSL. Finalmente, enlazar simbólicamente el directorio de instalación y verificar la configuración antes de iniciar el servicio.
Ejemplo de Instalación
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
sudo yum install -y pcre-devel openssl-devel
sudo useradd wwwuser -M -s /sbin/nologin
./configure --user=wwwuser --group=wwwuser --prefix=/opt/nginx1.24 --with-http_stub_status_module --with-http_ssl_module
make && sudo make install
sudo ln -s /opt/nginx1.24 /opt/nginx
sudo /opt/nginx/sbin/nginx -t
sudo /opt/nginx/sbin/nginx
Estructura de Directorios
El directorio de instalación contiene subdirectorios clave: conf para archivos de configuración como nginx.conf y parámetros FastCGI; html para el sitio web predeterminado; logs para registros de acceso y errores; sbin para el ejecutable principal; y directorios temporales para caché y proxy.
Archivo de Configuración Predeterminado
El archivo nginx.conf incluye directivas globales como worker_processes para definir el número de procesos basado en núcleos de CPU, y bloques events para establecer límites de conexiones. Dentro de http, se configuran tipos MIME, registro de acceso y parámetros de rendimiento. Un bloque server básico escucha en el puerto 80 y sirve contenido desde el directorio html.
Configuración Simplificada para Hosts Virtuales
worker_processes 2;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 70;
server {
listen 80;
server_name www.ejemplo.com;
root /var/www/ejemplo/www;
index index.html;
}
server {
listen 80;
server_name blog.ejemplo.com;
root /var/www/ejemplo/blog;
index index.html;
}
}
Para activar esta configuración, crear los directorios de sitios web, agregar archivos de índice, verificar la sintaxis y recargar Nginx.
Directivas y Consejos Avanzados
Para monitorear el estado de Nginx, habilitar el módulo stub_status en un host virtual dedicado, desactivando el registro de acceso. Configurar alias de servidor permitiendo múltiples nombres en una directiva server_name. Implementar redirecciones 301 permanentes usando la directiva rewrite para redirigir tráfico de dominios no deseados. Para seguridad, crear un bloque server inicial que niegue todas las solicitudes, previniendo accesos no autorizados por IP o dominios maliciosos. Las dircetivas de registro como log_format y access_log permiten personalizar el formato y destino de los logs.
Gestión de Registros y Rotación
La rotación de logs se puede automatizar mediante scripts que renombren archivos diariamente y recarguen Nginx para crear nuevos registros. Esto se integra con cron para ejecutar tareas periódicas. Para configuraciones basadas en puerto, ajustar la directiva listen y asegurar que los clientes especifiquen el puerto al acceder.
Configuración Modular con Includes
Nginx soporta configuraciones modulares mediante la directiva include, permitiendo dividir la configuración en múltiples archivos. Por ejemplo, se pueden crear archivos individuales para cada host virtual en un subdirectorio y referenciarlos desde el archivo principal.
Ejemplo de Configuración Modular
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
error_log /var/log/nginx/error.log error;
log_format principal '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include /etc/nginx/conf.d/*.conf;
}
Cada archivo en conf.d puede contener bloques server independientes para hosts virtuales específicos.