Cómo descargar archivos usando Https desde Nginx Docker Containers
Como administradores de sistemas, tenemos situaciones en las que necesitamos descargar archivos grandes, como archivos de respaldo, copias de seguridad de bases de datos, correos electrónicos, archivos de registro, etc. de forma segura entre nuestros servidores. Por lo general, usamos SFTP, SSH o SCP para estos fines. Pero estos procesos se ralentizan comparativamente cuando se trata de una descarga de copia de seguridad remota.
En este artículo, estoy explicando una forma conveniente de descargar archivos grandes usando HTTP con la ayuda de un contenedor Nginx Docker en un servidor Ubuntu 16.04.
Prerrequisitos
- Docker instaló el servidor Ubuntu 16.04
- Requerir un nombre de host FQDN
- Certificado SSL para su nombre de host
Creando certificado SSL para el nombre de host
En primer lugar, obtengamos nuestro certificado SSL para nuestro nombre de host. Estoy usando Let’s Encrypt para obtener mi certificado SSL gratuito. Podemos instalar Let’s Encrypt usando el repositorio de GitHub.
Instalar Git y bc
Dos de estos paquetes deben instalarse antes de la instalación de Let’s Encrypt. Bc es una “calculadora de lenguaje de precisión arbitraria. Se utiliza para el script de renovación automática en el software Let’s Encrypt. Puede instalar estos paquetes con estos comandos a continuación:
root@www:~# apt-get update root@www:~# apt-get -y install git bc
Una vez hecho esto, podemos descargar fácilmente vamos a cifrar clonando el repositorio de GitHub.
Clonación Let’s Encrypt Repository
Podemos usar este comando para clonar el repositorio Let’s Encrypt en la carpeta / opt.
root@www:~# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt Cloning into '/opt/letsencrypt'... remote: Counting objects: 39435, done. remote: Total 39435 (delta 0), reused 0 (delta 0), pack-reused 39435 Receiving objects: 100% (39435/39435), 10.63 MiB | 20.39 MiB/s, done. Resolving deltas: 100% (28067/28067), done. Checking connectivity... done.
Al clonar, tendremos una copia del repositorio vamos a cifrar en el directorio / opt / letsencrypt.
Emisión de certificado SSL
Let’s Encrypt proporciona numerosas formas de obtener certificados SSL, a través de varios complementos. Estamos usando el complemento Webroot para inicializar nuestro proceso de certificado. Se llama como un complemento de autenticación. Funciona colocando un archivo especial en el /.bien conocido directorio dentro de la raíz del documento, que el servicio Let’s Encrypt puede abrir a través de su servidor web para su validación. Veamos cómo podemos usar el complemento Webroot para obtener un certificado SSL.
Si no ha instalado un servidor web, puede instalar Nginx en su host de docker con el comando apt-get install nginx.
Ahora agregue la siguiente sección a su bloque de servidor SSL en su configuración predeterminada de vhost / etc / nginx / sites-available / default para permitir el acceso a la .bien conocido directorio para validación.
location ~ /.well-known { allow all; }
Esta carpeta se creará bajo la raíz del documento del dominio durante la emisión del certificado SSL por Let’s Encrypt. Ahora guarde el archivo y vuelva a cargar la configuración de Nginx.
Ahora podemos usar el complemento Webroot para solicitar nuestro certificado SSL con estos comandos. Puede especificar nuestros nombres de dominio con estos comandos con el -d opción. Para usar un solo certificado para múltiples dominios, podemos incluirlos todos a la vez usando las opciones -d como se muestra a continuación:
root@www:~# cd /opt/letsencrypt root@www:/opt/letsencrypt# ./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/html -d nodenixbox.com -d www.nodenixbox.com
Necesitamos movernos a la carpeta de repositorio de letsencrypt en / opt y ejecutar este comando desde allí. Este comando continúa con la instalación de los paquetes de Python requeridos y solicita ingresar la dirección de correo electrónico que se utilizará para avisos urgentes y recuperación de claves perdidas.
Ingrese su dirección de correo electrónico válida y pase a la siguiente pantalla para aceptar los términos y condiciones de este software.
Después de aceptar este Acuerdo de suscripción, la instalación se completará correctamente y le proporcionará los detalles del Certificado.
Puede ver los detalles del certificado y la fecha de vencimiento de nuestro certificado de dominio desde aquí.
Su certificado y cadena se han guardado en
/etc/letsencrypt/live/nodenixbox.com/fullchain.pem.
Tu certificado lo hará
expirará el 2016-11-05.
Puede editar su configuración Nginx predeterminada para incluir estos detalles de certificado para habilitar SSL y volver a cargar la configuración para actualizar estos cambios.
server { # SSL configuration # listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name nodenixbox.com www.nodenixbox.com; root /var/www/html/; ssl_certificate /etc/letsencrypt/live/nodenixbox.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nodenixbox.com/privkey.pem;
Puede verificar su instalación de SSL en la URL >>https://www.sslshopper.com/ssl-checker.html
Definición de ruta para descargas
Necesitamos agregar las siguientes entradas a nuestra configuración de Nginx Vhost bajo el bloque del servidor SSL para servir nuestros archivos cuando se realiza una solicitud en / descargas / url.
location /downloads/ { alias /files/; }
Creación de un contenedor Nginx Docker
Creemos nuestro contenedor de la ventana acoplable Nginx con la configuración segura de Nginx desde nuestro host acoplable junto con la instalación y los certificados encriptados. En primer lugar, cree un archivo docker-compose.yml. Este archivo le dice a Docker cómo ejecutar un contenedor específico.
files : This folder contains the files which needs to be downloaded conf : This folder contains our saved secured Nginx configuration /etc/letsencrypt & /opt/letsencrypt contains our certificate details and letsencrypt scripts. /var/www/ : contains our domain document roots.
PD: Podemos excluir los volúmenes que no prefieren copiar según nuestra conveniencia.
Además, expone los puertos 80 y 443 del contenedor de la ventana acoplable al puerto 8081 y 8080 del host, respectivamente.
El archivo anterior le dice a Docker que ejecute un contenedor usando nginx: latest image, monte los archivos de directorios y conf desde la máquina host, y exponga los puertos como se mencionó.
Ahora podemos ejecutar este comando para componer nuestro contenedor de ventana acoplable.
root@www:~# docker-compose up Recreating root_nginx_1 Attaching to root_nginx_1
Esto creará un contenedor docker como lo hemos compuesto y lo hará funcionar. Podemos ver el estado de nuestro contenedor Docker a continuación:
root@www:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a710ab1cdaa9 nginx:latest "nginx -g 'daemon off" About an hour ago Up About an hour 0.0.0.0:8081->80/tcp, 0.0.0.0:8080->443/tcp root_nginx_1
Podemos verificar la instalación segura de Nginx para su contenedor docker llamando a esta URL >> https://nodenix.com:8080 o en el verificador SSL.
Descarga de archivos de forma segura
Como hemos compuesto, los archivos que necesitamos descargar residen dentro de la carpeta / archivos en nuestro contenedor de la ventana acoplable.
root@www:~# docker exec -i -t a710ab1cdaa9 /bin/bash root@a710ab1cdaa9:/files# ls -l total 8 -rw-r--r-- 1 root root 172 Aug 8 07:39 log.tar.gz -rw-r--r-- 1 root root 110 Aug 8 07:32 mails.tar.gz
Ahora podemos descargarlo fácilmente de forma segura utilizando nuestra ventana acoplable Nginx desde esta URL >>> https://nodenixbox.com:8080/downloads/mails.tar.gz
Eso es :). En consecuencia, podemos descargar archivos grandes de los servidores según sus necesidades de forma más fácil y segura. Espero que este artículo sea informativo y útil para ti. Recomendaría sus valiosos comentarios y sugerencias al respecto. ¡Que tenga un lindo día!