Nginx CheatsheetNginx Cheatsheet

Nginx Cheatsheet

Tags
Nginx
Published
Author
URL

Recursos

Extraer token (o cualquier valor) de una cookie para autenticar

Requisitos

  • Nginx con módulo para JWT Auth -
Request de ejemplo
curl --location --request GET "http://localhost:80/images/avatars/marco.richetta_small" \ --header "cookie: _ga=GA1.1.2021982238.1634757758; token=tokenJWT123; otra_cookie=123"
Directiva de Nginx
Necesito extraer el contenido de token
$cookie_name me permite tomar cualquier valor de la cookie
location /images { # Extraer el token de la cookie enviada auth_jwt $cookie_token; # Con esto puedo ver el valor de la variable en los response headers # En este caso el valor debería ser "tokenJWT123" add_header X-debug-message "$cookie_token" always; }

Agregar headers para loggear mensajes

location /images { add_header X-debug-message "$variable" always; }
nginx.conf
 

Capturar GET/POST de un sistema

tcpdump -i eth0 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F'
Sorry not sorry Wireshark
 

Conectar Nginx dockerizado con a una red de Docker

La forma más cómoda sería crear un docker-compose con los containers en cuestión. De esta manera Docker se encarga de crear automáticamente una network y linkea los containers.
 
En este caso tengo un stack con docker-compose y otro container, el de nginx, suelto en un Dockerfile.
  1. Levantar el stack del docker-compose
  1. Buscar el nombre de la red creada para estos containers
    1. > docker network ls NETWORK ID NAME DRIVER SCOPE 4f0eaab32a7a enredarte_default bridge local 3ccaa94acfa4 feedback-backend_default bridge local 0f6e5c8022b4 bot_default bridge local # También podemos filtrar por columna > docker network ls --filter=name=bot 0f6e5c8022b4 bot_default bridge local
  1. Conectar el container aislado a la red creada por el docker-compose
    1. > docker network connect <nombre-de-la-red> <contenedor-aislado> # En mi caso docker network connect bot_default nginx-jwt-text
  1. Inspeccionar la red con los contenedores ya conectados
    1. Buscar la key "Containers" para ver la IP del contenedor que necesitamos
    2. > docker network inspect <nombre-de-la-red> # ... "Containers": { "3c352a937531dc63ecf1573ff551d49c56e8d1088ebbf28cbf8dc67f4c7cb225": { "Name": "bot-postgres-1", # ... "IPv4Address": "172.21.0.2/16", }, "7f60d88ada504393f6d304bf1be32ff2fb1f273e65d22e226085c869e7f9e8c6": { "Name": "nginx-jwt-test", # ... "IPv4Address": "172.21.0.4/16", }, "ff22471d066906d9c4f95be6d8f39aeaeac3b0788b847e328d3da80c260d1744": { "Name": "bot-botpress-1", # ... "IPv4Address": "172.21.0.3/16", } }, # ...
  1. En Nginx se pueden redirigir las requests a 172.21.0.3

Desventajas

  • Cuando se reinicia el contenedor que conectamos en el paso 3, debemos reconectarlo a la red.

Referencia