/ HOWTO

Nginx con HTTPs


En este post mostraremos como montar un servidor HTTP/HTTPS con NginX.

Usaremos un fichero “Dockerfile” basado en la imágen oficial de Nginx adaptada a nuestras necesidades, los certificados son creados y autofirmados.

Aunque los navegadores den un error, la información viaja de una manera segura, pero no hay entidad certificadora que los haya re-certificado, pienso que los navegadores deberían informar esto de otra manera. (no es lo mismo autofirmado, que sin seguridad)

Se podría crear un script con “CertBot” para poder usar LetsEncrypt y actualizar el certificado trimestralmente (Lo haremos en otro post).

En Nginx definimos la misma carpeta para HTTP y HTTPS, intentamos simplificar la configuración al mínimo y crear scripts para creación de imágen y de contenedor.

Creamos primero nuestra clave y certificado (autofirmado).

openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout ser.key -out ser.pem

Ahora creamos el fichero “Dockerfile” para generar una imágen adaptada a nuestras necesidades, usaremos una imágen descargada de HUB, creamos carpeta para ficheros html, usamos el “certificado y clave”, copiaremos los ficheros en la imágen que estamos creando, conectamos los puertos 80 y 443, definimos el comando a usar (nginx) y guardamos.

FROM nginx

RUN rm -f /etc/nginx/conf.d/default.conf

WORKDIR /var/www/html
COPY index.html /var/www/html
RUN chmod 755 /var/www/html/index.html

COPY nginx.conf /etc/nginx/conf.d/

COPY ser.key /etc/nginx/
COPY ser.pem /etc/nginx/

COPY nginx.conf /etc/nginx/

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

COPY entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

En la carpeta “html” solo creamos un fichero “home” simple (index.html).

<html>
<body>
DockerTips.com
</body>
</html>

Ahora creamos un fichero con la configuración de “nginx.conf”, 20 procesos máximos, servidor WEB en puertos 80 y 443, usando los ficheros de clave y certificado.

user  nginx;
worker_processes  20;

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

events {
    worker_connections  1024;
}

http {

server {
    listen              443 ssl;
    server_name         dockertips;
    ssl_certificate     ser.pem;
    ssl_certificate_key ser.key;
    location / {
        root  /var/www/html;
	    }
	}

server {

    listen 80 default_server;
    server_name         dockertips;

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

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

Creamos el script “build.sh” para crear todo el entorno y otro script para limpiar la imágen y el contenedor denerados.

build.sh

#!/bin/bash

./drop.sh

docker build -t httpd .
docker run --name web1 -p 80:80 -p 443:443 -d httpd
# -v /local:/container
nmap 127.0.0.1

# EOF

drop.sh

docker stop web1
docker rm web1
docker rmi httpd --force

Ahora para poner en funcionamiento todo:

./build.sh

Desde nuestro navegador podremos ver el web con/sin https.

Subscríbete y recibirás los últimos artículos semanalmente en tu email.