Nginx

Logo HTML5

Última edición el día 2020-12-14 a las 23:37.

Esta es la documentación que he recopilado para instalar y configurar un servidor Nginx en Ubuntu para distintos entornos.

Instalar y configurar servidor Nginx

  • Actualizar lista de paquetes: sudo apt update

  • Instalar Nginx: sudo apt install nginx

Nota

El servidor estará funcionando en la dirección: http://localhost y vista desde su ip: http://127.0.0.1, si accedemos veremos la página de bienvenida.

Arranque y estado del servidor (systemctl)

  • Comprobar estado: sudo systemctl status nginx

  • Arrancar: sudo systemctl start nginx

  • Reiniciar: sudo systemctl restart nginx

  • Detener: sudo systemctl stop nginx

Importante

Para evitar fallos con las urls largas editamos el archivo sudo nano /etc/nginx/nginx.conf y descomentamos la línea #server_names_hash_bucket_size 64; borrando la almohadilla.

Crear un Server Block

Un Server Block o Bloque de Servidor es un archivo de configuración para un sitio o aplicación web.

Preparar el directorio del proyecto

Para crear un Server Block hacemos lo siguiente:

  • Crear un directorio (misitio): /var/www/misitio

  • Asignar propiedad al usuario actual: sudo chown -R $USER:$USER /var/www/misitio

  • Ajustar permisos del directorio: sudo chmod -R 755 /var/www/misitio

Accedemos al directorio «misitio» y creamos un archivo de prueba index.html con un mensaje escrito para probar mas adelante su funcionamiento.

Crear fichero Server block

  • Crear un archivo para configurar el servidor: sudo nano /etc/nginx/sites-available/misitio

server {
    listen 80;
    listen [::]:80;

    root /var/www/misitio;
    index index.html index.htm;

    server_name 127.0.0.1;

    location / {
            try_files $uri $uri/ =404;
    }
}
  • Ahora se crea un enlace símbolico a la carpeta de sitios disponibles: sudo ln -s /etc/nginx/sites-available/misitio /etc/nginx/sites-enabled/

  • Y comprobamos la configuración de los Server Blocks: sudo nginx -t

  • Reiniciamos el servidor: sudo systemctl restart nginx

Y ya tenemos montado el servidor en http://127.0.0.0

Analizando las líneas: * Se abre un server con las llaves y dentro se asignan los puertos de escucha, que en este caso será el 80. * con root indicamos la carpeta donde se encuentra el proyecto. * con index definimos los archivos que tiene que reconocer como arranque de la aplicación. * con server_name le asignamos el dominio con el que va a trabajar. * con location asignamos una ruta en el proyecto y dentro de las llaves su comportamiento, en el caso de esta va a buscar archivos o si no encuentra enviará un error 404 de Nginx (también podemos personalizarlo).

Instalar y configurar el cortafuegos

Este paso es opcional pero muy recomendado, este cortafuegos nos ayudará a limitar el acceso a areas no deseadas.

  • Instalar el cortafuegos: sudo apt install ufw

  • Habilitar el cortafuegos: sudo ufw enable y elegimos YES

  • Comprobar el estado del cortafuegos: sudo ufw status

Trabajar con HTTPS

Para poder trabajar con HTTPS nos hará falta un certificado SSL, pero podemos ir configurando el cortafuegos: * Se elimina la regla HTTP: sudo ufw delete allow 'Nginx HTTP' * Se añade una nueva regla que lo permite todo: sudo ufw allow 'Nginx Full' * Comprobamos el estado: sudo ufw status

Activar SSL

Para activar SSL se puede utilizar de forma gratuita CERBOT el cual extiende un certificado Let’s Encrypt que dura 90 días y se puede renovar.

  • Añadir repositorio: sudo add-apt-repository ppa:certbot/certbot

  • Realizar instalación: sudo apt install python-certbot-nginx

  • Añadir los dominios y subdominios después de cada d: sudo certbot --nginx -d misitio.com -d www.misitio.com escogemos la opción 2 para desviar todo el tráfico hacia HTTPS

  • Para activar o renovar el certificado: sudo certbot renew --dry-run

  • Comprobamos que quedó bien la configuración de Nginx: sudo nginx -t

  • Reiniciamos el servidor Nginx: sudo systemctl restart nginx