Configurar Nginx Proxy Inverso con Docker

En esta nueva entrada, vamos a configurar un servicio de Nginx como proxy inverso utilizando Docker. Esto nos permitirá controlar la entrada a nuestros servicios publicados desde un único punto de acceso.

Primero de todo, vamos a crear una carpeta para guardar la configuración y los logs de nuestro contenedor:

mkdir nginx-proxy

Ahí dentro, crearemos un fichero nginx.conf y guardaremos ahí la configuración que queramos aplicar. En mi caso, voy a redireccionar varias paginas webs a servicios que tengo publicados en varios contenedores de mi propio servidor.

# Complete Nginx Docker reverse proxy config file

events {
  worker_connections  4096;  ## Default: 1024
}

http {

server {
  listen 80;
  listen [::]:80;
  server_name X.X.X.X; #DNS o direccion IP Publica de tu servidor

  location /web1{
    rewrite ^/web1(.*) /$1 break;
    proxy_pass http://172.17.0.1:25001;
  }

  location /web2{
    rewrite ^/web2(.*) /$1 break;
    proxy_pass http://172.17.0.1:8000;
    proxy_set_header Host $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;
  }


  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }


  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }

}
}

# End of Docker Nginx reverse proxy file

En mi caso, estoy publicando 2 paginas web utilizando solamente HTTP por el puerto 80. Se podría añadir HTTPS e incluso añadir certificados para securizar nuestra conexión.

Para correr nuestro contenedor en Nginx vamos a lanzar el siguiente comando:

docker run -d --name nginx-proxy \
 -v /root/nginx-proxy/nginx.conf:/etc/nginx/nginx.conf:ro \
 -v /root/nginx-proxy/logs:/var/log/nginx:rw \
 -p 80:80 nginx

Como vimos en la publicación de como instalar y configurar Docker, vamos a levantar un contenedor permitiendo el acceso mediante los puertos 80 (HTTP). Si añadimos HTTPS, solo habría que añadir otro -p 443:443. Adicionalmente, vamos a redireccionar la configuración del servicio y la carpeta de logs a la carpeta local que hemos creado anteriormente. Podemos quitar alguna de las opciones si no queremos permitir alguno de los protocolos o, por ejemplo, si no nos interesa guardar los logs en local.

Con esto, ya podríamos acceder con un navegador a la IP de nuestro servidor y se debería mostrar la pagina por defecto de Nginx. Una vez comprobado que el servicio funciona correctamente, podemos añadir la ruta correspondiente a la web o servicio que queramos acceder.

Yo utilizo este servicio en algunos de mis VPS para publicar servicios internos o acceder externamente a algunos contenedores.

Espero que os sirva esta guía y podéis dejar en comentarios si os ha funcionado o tenéis alguna duda.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.