En esta sección, aprenderemos cómo configurar NGINX de manera básica. Este conocimiento es fundamental para poder utilizar NGINX como servidor web o proxy inverso. Abordaremos los siguientes temas:

  1. Estructura de Archivos de Configuración
  2. Configuración del Servidor
  3. Configuración de Bloques de Servidor
  4. Configuración de Ubicaciones

  1. Estructura de Archivos de Configuración

NGINX utiliza archivos de configuración para definir su comportamiento. El archivo principal de configuración es nginx.conf, que generalmente se encuentra en /etc/nginx/nginx.conf en sistemas basados en Unix.

Estructura Básica de nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

Explicación de la Estructura

  • user: Define el usuario bajo el cual se ejecuta NGINX.
  • worker_processes: Número de procesos de trabajo. Generalmente, se establece en el número de núcleos de CPU.
  • error_log: Ubicación del archivo de registro de errores.
  • pid: Archivo que contiene el ID de proceso de NGINX.
  • events: Configuración de eventos, como el número máximo de conexiones.
  • http: Bloque principal para la configuración HTTP.
    • include: Incluye otros archivos de configuración.
    • log_format: Define el formato del registro de acceso.
    • access_log: Ubicación del archivo de registro de acceso.
    • sendfile: Mejora el rendimiento de la transferencia de archivos.
    • keepalive_timeout: Tiempo de espera para conexiones keep-alive.

  1. Configuración del Servidor

Dentro del bloque http, podemos definir múltiples servidores utilizando bloques server.

Ejemplo de Configuración de Servidor

http {
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        error_page  404              /404.html;
        location = /40x.html {
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        }
    }
}

Explicación del Bloque server

  • listen: Puerto en el que el servidor escucha (por defecto, 80 para HTTP).
  • server_name: Nombre del servidor (puede ser un dominio o localhost).
  • location: Define cómo se manejan las solicitudes para diferentes rutas.
    • root: Directorio raíz para los archivos servidos.
    • index: Archivos de índice que se buscan en el directorio raíz.
  • error_page: Define páginas de error personalizadas.

  1. Configuración de Bloques de Servidor

Los bloques de servidor (server) permiten configurar múltiples sitios web en un solo servidor NGINX.

Ejemplo de Múltiples Bloques de Servidor

http {
    server {
        listen       80;
        server_name  example.com;

        location / {
            root   /var/www/example.com;
            index  index.html;
        }
    }

    server {
        listen       80;
        server_name  another-example.com;

        location / {
            root   /var/www/another-example.com;
            index  index.html;
        }
    }
}

Explicación

  • Cada bloque server puede tener su propia configuración de listen, server_name, y location.
  • Esto permite servir diferentes sitios web desde el mismo servidor NGINX.

  1. Configuración de Ubicaciones

El bloque location se utiliza para definir cómo se manejan las solicitudes para diferentes rutas.

Ejemplo de Configuración de Ubicaciones

server {
    listen       80;
    server_name  example.com;

    location / {
        root   /var/www/example.com;
        index  index.html;
    }

    location /images/ {
        root   /var/www/images;
    }

    location /api/ {
        proxy_pass http://backend_server;
    }
}

Explicación

  • location /: Maneja todas las solicitudes a la raíz del sitio.
  • location /images/: Maneja todas las solicitudes a /images/ y sirve archivos desde /var/www/images.
  • location /api/: Redirige todas las solicitudes a /api/ a un servidor backend.

Ejercicio Práctico

Ejercicio

  1. Crea un archivo de configuración de NGINX que sirva contenido estático desde dos directorios diferentes:
    • /var/www/site1 para site1.com
    • /var/www/site2 para site2.com
  2. Configura una página de error personalizada para el error 404.

Solución

http {
    server {
        listen       80;
        server_name  site1.com;

        location / {
            root   /var/www/site1;
            index  index.html;
        }

        error_page  404 /404.html;
        location = /404.html {
            root /var/www/site1;
        }
    }

    server {
        listen       80;
        server_name  site2.com;

        location / {
            root   /var/www/site2;
            index  index.html;
        }

        error_page  404 /404.html;
        location = /404.html {
            root /var/www/site2;
        }
    }
}

Explicación

  • Dos bloques server para site1.com y site2.com.
  • Cada servidor tiene su propio directorio raíz y página de error personalizada.

Conclusión

En esta sección, hemos aprendido la estructura básica de los archivos de configuración de NGINX, cómo configurar servidores y ubicaciones, y cómo manejar múltiples sitios web en un solo servidor NGINX. Con esta base, estamos listos para explorar configuraciones más avanzadas y específicas en los siguientes módulos.

© Copyright 2024. Todos los derechos reservados