Cómo instalar y configurar un servidor web Nginx en Cloud VPS: Guía paso a paso

En este artículo, analizaremos en detalle el proceso de instalación y configuración del servidor web Nginx en un VPS en la nube. Recorreremos todos los pasos, desde la conexión al servidor y la actualización del sistema, hasta la configuración de hosts virtuales y la garantía de la seguridad. Independientemente de si eres un administrador de sistemas principiante o un desarrollador experimentado, esta guía te ayudará a configurar tu servidor web de forma rápida y eficaz para un rendimiento óptimo.

En este artículo se tratarán los siguientes temas:

  1. Preparación del servidor para la instalación de Nginx
  2. Instalación de Nginx en VPS
  3. Configuración básica de Nginx y hosts virtuales
  4. Garantizar la seguridad de Nginx
  5. Comprobación y depuración del funcionamiento de Nginx

Preparación del servidor para la instalación de Nginx

¿Cómo instalar y configurar un servidor web en <a href=Cloud VPS? - Captura de pantalla de la conexión a VPS a través de SSH." title="Illustration for Скриншот подключения к VPS через SSH." width="512" height="512" / class="wp-image-5672 wp-image-12400">

Antes de comenzar a instalar Nginx, debes asegurarte de que tu servidor esté listo para funcionar. Esto incluye la conexión al servidor, la actualización de la lista de paquetes y la instalación de las utilidades necesarias.

VPS хостинг

Виртуальные серверы с гарантированными ресурсами

Выбрать VPS

Conexión al VPS por SSH

El primer paso es conectarte a tu VPS a través de SSH (Secure Shell). Para esto, necesitarás un cliente SSH, como PuTTY (para Windows) o un terminal integrado (para macOS y Linux). Necesitarás la dirección IP de tu servidor, el nombre de usuario (normalmente `root` o el nombre de usuario creado al configurar el servidor) y la contraseña.

Ejemplo de comando para conectarse a través de SSH (Linux/macOS):

ssh user@your_server_ip

Reemplaza `user` con el nombre de usuario y `your_server_ip` con la dirección IP de tu servidor. Después de ingresar el comando, se te pedirá que ingreses la contraseña. Ingresa la contraseña y presiona Enter.

Ejemplo de conexión a través de PuTTY (Windows):

  • Ejecuta PuTTY.
  • En el campo «Host Name (or IP address)», ingresa la dirección IP de tu servidor.
  • Asegúrate de que el puerto se especifique como 22 (puerto estándar para SSH).
  • Haz clic en el botón «Open».
  • En la ventana de terminal que se abre, ingresa el nombre de usuario y la contraseña.

Actualización de la lista de paquetes y paquetes instalados

Después de conectarte al servidor, debes actualizar la lista de paquetes y los paquetes instalados. Esto asegurará de que tengas instaladas las últimas versiones del software y que tengas acceso a las versiones más recientes de Nginx.

Para Debian/Ubuntu:

sudo apt update
sudo apt upgrade

`sudo apt update` actualiza la lista de paquetes disponibles. `sudo apt upgrade` actualiza los paquetes instalados a las últimas versiones. Se recomienda reiniciar el servidor después de la actualización si se ha actualizado el kernel del sistema.

Para CentOS/RHEL/Fedora:

sudo yum update

O, para versiones más nuevas de Fedora:

sudo dnf update

`sudo yum update` o `sudo dnf update` actualizan todos los paquetes instalados a las últimas versiones. También puede ser necesario reiniciar el servidor.

Instalación de las utilidades necesarias

Para continuar trabajando con el servidor y Nginx, es posible que necesites utilidades adicionales, como `nano` o `vim` (editores de texto), `curl` o `wget` (para descargar archivos), `unzip` (para descomprimir archivos) y otras.

Ejemplo de instalación de utilidades en Debian/Ubuntu:

sudo apt install nano curl wget unzip

Ejemplo de instalación de utilidades en CentOS/RHEL/Fedora:

sudo yum install nano curl wget unzip

Instala las utilidades que necesites para trabajar con el servidor.

Consejo experto: Siempre actualiza el sistema antes de instalar software nuevo. Esto ayudará a evitar problemas de dependencias y garantizará el funcionamiento estable de tu servidor.

Instalación de Nginx en VPS

¿Cómo instalar y configurar un servidor web en Cloud VPS? - Captura de pantalla de la instalación de Nginx a través del terminal.

Una vez preparado el servidor, puedes comenzar a instalar Nginx. El proceso de instalación de Nginx depende del sistema operativo que estés utilizando.

Instalación de Nginx en Debian/Ubuntu

Para instalar Nginx en Debian/Ubuntu, usa el siguiente comando:

sudo apt install nginx

Durante la instalación, es posible que se te pida que confirmes la instalación. Ingresa `y` y presiona Enter.

Una vez finalizada la instalación, Nginx se iniciará automáticamente. Para verificar que Nginx está funcionando, abre un navegador web y ve a la dirección IP de tu servidor. Deberías ver la página de bienvenida predeterminada de Nginx.

Ejemplo de comando para verificar el estado de Nginx:

sudo systemctl status nginx

Este comando mostrará el estado actual de Nginx (iniciado o detenido), así como los últimos logs.

Instalación de Nginx en CentOS/RHEL/Fedora

Para instalar Nginx en CentOS/RHEL/Fedora, usa el siguiente comando:

sudo yum install nginx

O, para versiones más nuevas de Fedora:

sudo dnf install nginx

Después de la instalación, debes iniciar Nginx y habilitar su inicio automático al arrancar el sistema:

sudo systemctl start nginx
sudo systemctl enable nginx

`sudo systemctl start nginx` inicia Nginx. `sudo systemctl enable nginx` habilita el inicio automático de Nginx al arrancar el sistema.

Al igual que con Debian/Ubuntu, puedes verificar el estado de Nginx con el comando `sudo systemctl status nginx` y abrir un navegador web en la dirección IP de tu servidor para ver la página de bienvenida de Nginx.

Configuración del Firewall (cortafuegos)

Después de instalar Nginx, debes configurar el firewall para permitir el acceso al servidor web desde el exterior. De forma predeterminada, Nginx usa los puertos 80 (HTTP) y 443 (HTTPS).

Para UFW (Uncomplicated Firewall) en Debian/Ubuntu:

sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'
sudo ufw enable

`sudo ufw allow ‘Nginx HTTP’` permite el acceso al puerto 80. `sudo ufw allow ‘Nginx HTTPS’` permite el acceso al puerto 443. `sudo ufw enable` habilita el firewall.

Para FirewallD en CentOS/RHEL/Fedora:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

`sudo firewall-cmd —permanent —add-service=http` permite el acceso al puerto 80. `sudo firewall-cmd —permanent —add-service=https` permite el acceso al puerto 443. `—permanent` hace que los cambios sean permanentes después de reiniciar. `sudo firewall-cmd —reload` recarga el firewall, aplicando los cambios.

Ejemplo de comando para verificar el estado de FirewallD:

sudo firewall-cmd --list-all

Este comando mostrará las reglas actuales del firewall.

Configuración básica de Nginx y hosts virtuales

Después de instalar Nginx, debes configurarlo para que funcione con tus sitios web. Esto incluye la configuración de hosts virtuales y los parámetros básicos de Nginx.

Archivos de configuración principales de Nginx

El archivo de configuración principal de Nginx se encuentra en `/etc/nginx/nginx.conf`. Este archivo contiene la configuración general de Nginx, como la cantidad de procesos de trabajo, la cantidad máxima de conexiones y otros parámetros.

Los archivos de configuración de los hosts virtuales se encuentran en el directorio `/etc/nginx/conf.d/` (en CentOS/RHEL/Fedora) o `/etc/nginx/sites-available/` y `/etc/nginx/sites-enabled/` (en Debian/Ubuntu). En Debian/Ubuntu, los archivos de configuración de los hosts virtuales se almacenan en `/etc/nginx/sites-available/`, y los enlaces simbólicos a los archivos de `/etc/nginx/sites-available/` que determinan qué hosts virtuales están activos se encuentran en `/etc/nginx/sites-enabled/`.

Ejemplo de estructura de directorios en Debian/Ubuntu:

/etc/nginx/
├── nginx.conf  # Archivo de configuración principal
├── sites-available/
│   └── default  # Ejemplo de archivo de configuración de host virtual
├── sites-enabled/
│   └── default  # Enlace simbólico a default desde sites-available

Configuración de un host virtual

Un host virtual permite ejecutar varios sitios web en un mismo servidor. Se crea un archivo de configuración separado para cada sitio.

Ejemplo de archivo de configuración de host virtual (Debian/Ubuntu):

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    root /var/www/yourdomain.com;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Reemplaza `yourdomain.com` con el nombre de tu dominio. `root /var/www/yourdomain.com` apunta al directorio raíz del sitio. `index index.html index.htm` define los archivos que se utilizarán como página principal. `location /` define cómo Nginx gestiona las solicitudes al sitio.

Pasos para crear y activar un host virtual (Debian/Ubuntu):

  • Crea el archivo de configuración del host virtual: sudo nano /etc/nginx/sites-available/yourdomain.com
  • Pega el contenido del ejemplo de archivo de configuración y reemplaza `yourdomain.com` con tu nombre de dominio.
  • Crea un enlace simbólico a este archivo en el directorio `/etc/nginx/sites-enabled/`: sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
  • Elimina el host virtual predeterminado: sudo rm /etc/nginx/sites-enabled/default
  • Reinicia Nginx: sudo systemctl restart nginx

Ejemplo de archivo de configuración de host virtual (CentOS/RHEL/Fedora):

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    root /usr/share/nginx/html/yourdomain.com;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Pasos para crear y activar un host virtual (CentOS/RHEL/Fedora):

  • Crea el archivo de configuración del host virtual: sudo nano /etc/nginx/conf.d/yourdomain.com.conf
  • Pega el contenido del ejemplo de archivo de configuración y reemplaza `yourdomain.com` con tu nombre de dominio.
  • Reinicia Nginx: sudo systemctl restart nginx

Prueba de la configuración de Nginx

Antes de reiniciar Nginx, se recomienda verificar la configuración en busca de errores. Puedes hacer esto con el siguiente comando:

sudo nginx -t

Si hay errores en la configuración, el comando mostrará un mensaje de error que indica el archivo y la línea en la que se encuentra. Corrige los errores y repite la verificación.

Ejemplo de resultado exitoso de la verificación de la configuración:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Consejo experto: Utiliza un sistema de control de versiones (por ejemplo, Git) para almacenar los archivos de configuración de Nginx. Esto te permitirá revertir fácilmente a versiones anteriores en caso de que surjan problemas.

Garantizar la seguridad de Nginx

Garantizar la seguridad de Nginx es un aspecto importante de la configuración del servidor web. Esto incluye la configuración de SSL/TLS, la restricción del acceso y la protección contra ataques DDoS.

Configuración de SSL/TLS con Let’s Encrypt

El cifrado SSL/TLS garantiza la transmisión segura de datos entre el servidor y el cliente. Let’s Encrypt es una autoridad de certificación gratuita que permite obtener certificados SSL/TLS para tu sitio web.

Instalación de Certbot (cliente de Let’s Encrypt):

Para Debian/Ubuntu:

sudo apt install certbot python3-certbot-nginx

Para CentOS/RHEL/Fedora:

sudo yum install certbot python3-certbot-nginx

O, si yum no encuentra el paquete:

sudo dnf install certbot python3-certbot-nginx

Obtención e instalación del certificado SSL/TLS:

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Reemplaza `yourdomain.com` con el nombre de tu dominio. Certbot configurará automáticamente Nginx para usar SSL/TLS y configurará la renovación automática del certificado.

Durante la ejecución de Certbot, se te pedirá que ingreses una dirección de correo electrónico y que aceptes los términos de uso. También se te pedirá que redirijas el tráfico HTTP a HTTPS. Se recomienda elegir esta opción para mejorar la seguridad.

Restricción del acceso a los paneles de administración

Si tienes paneles de administración instalados en tu servidor (por ejemplo, phpMyAdmin), se recomienda restringir el acceso a ellos para evitar el acceso no autorizado.

Ejemplo de configuración de Nginx para restringir el acceso a phpMyAdmin:

location /phpmyadmin {
    allow 192.168.1.0/24;  # Permitir el acceso solo desde la red local
    allow 10.0.0.0/16;   # Permitir el acceso solo desde otra red local
    deny all;          # Denegar el acceso a todos los demás
}

Reemplaza `192.168.1.0/24` y `10.0.0.0/16` con los rangos de direcciones IP desde los que deseas permitir el acceso. `deny all` deniega el acceso a todas las demás direcciones IP.

Agrega este bloque al archivo de configuración de tu host virtual.

Protección contra ataques DDoS

Los ataques DDoS (Distributed Denial of Service) pueden dejar tu sitio web fuera de servicio, sobrecargando el servidor con una gran cantidad de solicitudes. Para protegerte contra los ataques DDoS, puedes utilizar varios métodos, como limitar la cantidad de conexiones desde una misma dirección IP y usar una CDN (Content Delivery Network).

Ejemplo de configuración de Nginx para limitar la cantidad de conexiones desde una misma dirección IP:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

server {
    ...
    location / {
        limit_req zone=mylimit burst=5 nodelay;
        ...
    }
}

`limit_req_zone` define una zona para almacenar información sobre la cantidad de solicitudes desde cada dirección IP. `zone=mylimit:10m` crea una zona con el nombre `mylimit` y un tamaño de 10 MB. `rate=1r/s` limita la cantidad de solicitudes a 1 por segundo. `limit_req zone=mylimit burst=5 nodelay` permite que el cliente envíe hasta 5 solicitudes en un corto período de tiempo (burst), antes de que Nginx comience a limitar las solicitudes. `nodelay` desactiva el retraso al exceder el límite de burst.

Métodos alternativos de protección contra ataques DDoS:

  • Uso de CDN: Una CDN distribuye el contenido de tu sitio web en varios servidores, lo que reduce la carga en el servidor principal y te protege contra ataques DDoS.
  • Uso de un firewall: Un firewall puede bloquear el tráfico sospechoso y proteger tu servidor contra ataques DDoS.
  • Actualización regular del software: La actualización regular del software permite cerrar vulnerabilidades conocidas y mejorar la seguridad de tu servidor.

Enlace externo: Puedes obtener más información sobre la seguridad de Nginx en el sitio web nginx.com.

Comprobación y depuración del funcionamiento de Nginx

Después de instalar y configurar Nginx, debes verificar su funcionamiento y asegurarte de que todo esté configurado correctamente. Esto incluye la verificación de la disponibilidad del sitio web, la visualización de los logs y la depuración de errores.

Verificación de la disponibilidad del sitio web

La forma más sencilla de verificar la disponibilidad del sitio web es abrirlo en un navegador web. Ingresa el nombre de tu dominio en la barra de direcciones y presiona Enter. Si el sitio web se abre, significa que Nginx está funcionando correctamente y está configurado correctamente.

Si el sitio web no se abre, verifica lo siguiente:

  • La exactitud del nombre de dominio: Asegúrate de haber ingresado correctamente el nombre de dominio en la barra de direcciones.
  • La configuración de DNS: Asegúrate de que los registros DNS de tu dominio apunten a la dirección IP de tu servidor.
  • La configuración del firewall: Asegúrate de que el firewall permita el acceso a los puertos 80 y 443.
  • El estado de Nginx: Asegúrate de que Nginx esté iniciado y funcionando correctamente.
  • La configuración de Nginx: Asegúrate de que la configuración de Nginx esté configurada correctamente y no contenga errores.

Visualización de los logs de Nginx

Los logs de Nginx contienen información sobre las solicitudes al sitio web y los errores que se producen durante el funcionamiento de Nginx. Los logs pueden ser útiles para depurar errores y analizar el tráfico.

Los logs principales de Nginx:

  • /var/log/nginx/access.log: Contiene información sobre cada solicitud al sitio web.
  • /var/log/nginx/error.log: Contiene información sobre los errores que se producen durante el funcionamiento de Nginx.

Ejemplo de visualización del log de errores de Nginx:

sudo tail -f /var/log/nginx/error.log

`sudo tail -f /var/log/nginx/error.log` muestra las últimas líneas del archivo `/var/log/nginx/error.log` y actualiza la salida en tiempo real, mostrando los nuevos errores que se producen durante el funcionamiento de Nginx.

Ejemplo de análisis del log de acceso de Nginx con awk:

sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Este comando muestra las 10 direcciones IP desde las que se recibe la mayor cantidad de solicitudes a tu sitio web. Utiliza `awk` para extraer la dirección IP ($1), `sort` para ordenar las direcciones IP, `uniq -c` para contar la cantidad de direcciones IP únicas, `sort -nr` para ordenar por cantidad de solicitudes en orden inverso y `head -10` para mostrar las primeras 10 líneas.

Depuración de errores

Si encuentras errores en los logs de Nginx, debes depurarlos. Para esto, puedes utilizar varios métodos, como:

  • Verificación de la configuración de Nginx: Asegúrate de que la configuración de Nginx esté configurada correctamente y no contenga errores.
  • Verificación de los permisos de acceso: Asegúrate de que Nginx tenga permisos de acceso a los archivos y directorios del sitio web.
  • Verificación de las dependencias: Asegúrate de tener instaladas todas las dependencias necesarias para el funcionamiento del sitio web.
  • Uso de un depurador: Utiliza un depurador para ejecutar el código paso a paso e identificar errores.

Ejemplo de error común y su solución:

Error: 403 Forbidden.

Causa: Nginx no tiene permisos de acceso a los archivos del sitio web.

Solución: Cambia los permisos de acceso a los archivos del sitio web, otorgando a Nginx permisos de lectura y ejecución.

sudo chown -R www-data:www-data /var/www/yourdomain.com
sudo chmod -R 755 /var/www/yourdomain.com

Reemplaza `/var/www/yourdomain.com` con el directorio raíz de tu sitio web. `www-data` es el nombre de usuario y grupo con el que se ejecuta Nginx (en Debian/Ubuntu). En CentOS/RHEL/Fedora, esto suele ser `nginx`. `chown` cambia el propietario y el grupo de los archivos. `chmod` cambia los permisos de acceso a los archivos. `755` otorga al propietario permisos de lectura, escritura y ejecución, y al grupo y al resto de los usuarios, permisos de lectura y ejecución.

Cita: «La depuración es el proceso de eliminar los defectos que han sido agregados por el programador.» — Edsger W. Dijkstra.