Cómo configurar Nginx con HTTPS

Hola!

Este es mi primer post lo voy a hacer porque varios compañeros del grupo de Telegram lo han comentado que seria interesante así que lo voy a intentare explicar todo lo mejor que sé. No seáis muy duros jejejej.

  • Primero ¿Que es Nginx?

  • Comprar dominio y certificado SSL

  • ¿Cómo se instala?

  • ¿Qué necesitamos para acceder por https?

Primero ¿Qué es Nginx?

Nginx, pronunciado como “engine-ex”, es un servidor web de código abierto que, desde su éxito inicial como servidor web, ahora también es usado como proxy inverso, cache de HTTP, y balanceador de carga.

Lo que nos interesa la funcionalidad de proxy inverso, ¿Qué es esto?
En nuestro caso es la aplicación que recibe todo el trafico entrante de X puerto y luego “redirige” el trafico para en un mismo dominio pueda tener varias aplicaciones corriendo bajo el mismo dominio(explicado a lo bruto xD). Vamos a poner un ejemplo, queremos acceder a ejemplo.es -> ahí va a estar portal de asustor

y en ejemplo.es/nextcloud (tapo mi dominio por seguridad) tenemos nextcloud

Comprar dominio y certificado SSL

Actualizo: Esto no es obligatorio podéis usar dominio gratuito e instalar un certificado gratis con certbot (sería genial tener una guía de esto, así que os animo a hacerla!)
Este pase yo lo hice en swhosting.com pero ahora me cambié a https://dinahosting.com/ lo podéis comprar donde queráis el proceso es más o menos el mismo para todas.

Básicamente tienes que buscar un nombre que este disponible y comprarlo, respecto al certificado SSL igual solo que a mi me dieron la opción de verificarlos mediante un correo electrónico y luego en el panel puedes descargártelos, todo esto depende de donde lo compres así que no lo explico paso a paso.

¿Cómo se instala?

Es muy fácil con Docker!.

Vamos a instalar docker, vamos a la APP center y buscamos docker

que fácil, ahora vamos a instalar Portainer para ver de forma grafica los contenedores, reinicarlos… Hacemos lo buscamos en APP center e instalamos

Vamos a abrir portainer (la primera vez os pedirá crear una contraseña para el usuario “admin”)

image

Ahora vamos a instalar nginx , bienn!!. Para ello necesitamos conectar por ssh con el usuario administrador. De la siguiente forma podemos conectar:
Abrimos una terminal, EJ windows 10 Powershell y escribimos lo siguiente:
ssh nombreUsuario@ipNas. En mi caso:

ssh usuario@192.168.1.3

Introducimos la contraseña del usuario

Ahora vamos a usar docker jejejej

Copiar el siguiente comando en un bloc de notas:

docker run --name nginx
-p 80:80
-p 443:443 \
-v /volume1/Docker/dockerVolumes/nginx/sample.conf:/etc/nginx/conf.d/nginx.conf
-v /volume1/Docker/dockerVolumes/certs:/etc/nginx/certs -d nginx

Vamos explicar un poco que significa:

–name nginx -> el nombre que le vamos a poner al contenedor,podeis poner --name pepito

-p 80:80 y -p 443:443 -> los puertos que va a usar el contenedor

-v /volume1/Docker/dockerVolumes/nginx/sample.conf:/etc/nginx/conf.d/nginx.conf ->
este lo vamos a dividir en dos la partes, izquirda de los “:” y la derecha
la izquierda “/volume1/Docker/dockerVolumes/nginx/sample.conf” eso es la ruta donde vamos a ubicar el archivo de configuración es mi caso es este, podéis elegir la mejor ruta para vosotros

la parte derecha es la que va a existir dentro del contenedor yo no la modificaría.

-v /volume1/Docker/dockerVolumes/certs:/etc/nginx/certs -> igual que el paso anterior pero esta es la carpeta donde va a estar alojados los ficheros del certificado SSL.


-d nginx -> el nombre de la imagen a descargar.

modifica las rutas que necesites para que se adapte a tus necesidades, una vez modificada copia el comando y lánzalo con sudo. En mi caso queda asi:

sudo docker run --name nginx
-p 80:80
-p 443:443 \
-v /volume1/Docker/dockerVolumes/nginx/sample.conf:/etc/nginx/conf.d/nginx.conf
-v /volume1/Docker/dockerVolumes/certs:/etc/nginx/certs -d nginx

Una vez completado, entramos en portainer

Vosotros solo tendréis los contenedores de portainer y nginx. Si esta en “runnning” o “healthy” es que todo esta bien.

Ahora vamos a copiar los certificados en la carpeta que definimos antes

Ahora vamos a crear la configuración para nginx, abrimos un blog de notas.

server {
    listen 80 default_server; #esta parte es para redirigir todo el trafico por el puerto 443, el puerto seguro
    server_name _;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name www.ejemplo.es; # -> nombre domino
	ssl_certificate     /etc/nginx/certs/ssl.crt; #-> nombre de certificados
	ssl_certificate_key /etc/nginx/certs/rsa_key.txt; #-> nombre clave certificadoTexto preformateado
    location / {
        proxy_pass https://192.168.1.3:8022/; #ruta de portal de asustor
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header X-Scheme $scheme;
    }	
}

Resumen del tocho que he puesto (próximamente lo actualizare para explicarlo mejor) indicamos el nombre de nuestro dominio, también ponemos los nombres de los ficheros del certificado y la ruta de local donde esta el portal de asustor.

Subimos el archivo a la ruta indicada anteriormente

Reiniciamos el contenedor y ya deberíamos poder acceder desde fuera de casa con el https

image

Y ya estaría hecho lo difícil !

Espero recibir vuestros comentarios para ir actualizando la guía y poder mejorarla
Saludos

Fuentes:


https://hub.docker.com/_/nginx

2 Me gusta

Sinceramente no tengo ni idea de todo lo que escribes, pero desde luego no puedo pasar sin agradecerte el tiempo y trabajo que has dedicado a dejarlo aqui explicado… Muchas gracias.

1 me gusta

Pensaba editarlo para mejorarlo pero no me deja…
Voy a abrir un ticket por si lo pueden arreglar

Buenos días,

Hola cifu2, antes de nada, bienvenido al foro. Muchas gracias por tu guía. Actualmente, ADM v3.5 (en adelante) integra una función propia de proxy inverso, la cual, debería facilitar en gran medida la configuración de éste, proporcionando un método seguro de acceso remoto (mediante HTTPS) a aquellas aplicaciones que carecen de éste.

Enlace: https://www.asustor.com/online/online_help?id=75&lan=es
Guía (en inglés): https://www.asustor.com/online/College_topic?topic=325

Un cordial saludo,

Rubén Rodríguez

Hola,
Gracias al video de han compartido por el grupo de telegram he visto una manera más sencilla de adminitrar nginx, con NPM(nginx prox mangager)
EL video en cuestion es este: https://www.youtube.com/watch?v=0n9DLj2ndo4

Lo explica muy bien y tiene muchos videos interesantes son muy recomentables!.

Lo si que si cambiaría es lo siguiente:

  • Uso el siguiente docker-compose porque no tenemos que crear nosotros manualmente el config.properties

Como no puedo adjuntar el archivo dejo el contenido del docker-compose.yml solo teneis que guardarlo que este nombre y hacer un “docker compose up”

version: ‘3’
services:
app:
image: ‘jc21/nginx-proxy-manager:latest’
ports:
- ‘4001:80’
- ‘4003:81’
- ‘4004:443’
environment:
DB_MYSQL_HOST: “db”
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: “npm”
DB_MYSQL_PASSWORD: “npm”
DB_MYSQL_NAME: “npm”
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: ‘jc21/mariadb-aria:10.4’
environment:
MYSQL_ROOT_PASSWORD: ‘npm’
MYSQL_DATABASE: ‘npm’
MYSQL_USER: ‘npm’
MYSQL_PASSWORD: ‘npm’
volumes:
- ./data/mysql:/var/lib/mysql

Una vez levantado tendreis NPM corriendo y añadir entradas es muy sencillo desde la interfaz grafica.