Eliminar User-agents de tus logs con Nginx

Tuve un problema, con AWS el ELB continuamente “ping” a tus EC2 instancias para ver si estan funcionando. Todo bien aqui, pero no quiero esta mierda en mis logs (¿registros?)!
Por ejemplo, el access_log para Nginx contiene 28367 lineas, de esos 28073 son del ELB-HealthChecker/1.0 y no los quiero.

Así que para eliminarlos de tus logs completamente vas a necesitar una nueva versión de Nginx, hay algo distinto que nos requiere (el conditional en el access_log bloque de codigo).

El sintaxis es el siguiente (documentación): access_log path [format [buffer=size [flush=time]] [if=condition]];, ahora estas pensando que esto es muy fácil, solo hay que poner
access_log /var/log/nginx/my.access.log combined if=$http_user_agent !~ 'ELB-HealthChecker' y ya está, no?

No exactamente, pero cerca! El forma del if= requiere un booleano, es decir que si es un uno el registro estaría creado o si es un cero, no! Pero como haces eso?

Usando una característica se llama “map“, eso te deje crear un nuevo variable con el valor cero o uno, dependiente en lo que quieres. Para mi es el puto ELB-HealthChecker.
Solo puedes crear un map en el http sección de Nignx, así que probablemente en tu /etc/nginx/nginx.conf vas a tener que poner algo como:

  map $http_user_agent $is_not_elb {
    default 1;
    "ELB-HealthChecker*" 0;
  }

Y luego en el sitio de tu pagina solo tienes que cambiar el access_log para que dice la nueva “if”. El mío dice:
access_log /var/log/nginx/naytech.es.access.log combined if=$is_not_elb;

Y es muy fácil si quieres añadir más user agents, es solo una linea en el map.

¿Cómo usar HTTPS en vez de HTTP con Nginx?

Bueno, esto es muy fácil y lo he hecho recientemente (y los atentos verán que esta pagina usa LetsEncrypt), así que:

Usualmente tendrías una configuración por cada sitio, cada domain (example.com, naytech.es, etc). Sería en /etc/nginx/sites-enabled por seguro y un enlace (tipo simlink) a eso en /etc/nginx/sites-available.

Tienes que copiar la sección abajo de:

server {
    listen 80;
    server_name naytech.es www.naytech.es;
    … más cosas aqui
}

Y cambiar el listen 80 entre un listen 443 y luego añadir tus certificados (los cuales habías creado antes, ¡¿verdad?!) y los lineas

    ssl on;
    ssl_certificate /etc/nginx/ssl/chained.pem;
    ssl_certificate_key /etc/nginx/ssl/naytech.key;

Finalmente hay que poner redirección de HTTP a HTTPS, por esto solo nececitas una linea, es en el siguente ejemplo:

server {
    listen 80;
    server_name naytech.es www.naytech.es ;

    return 301 https://www.naytech.es$request_uri;
}

Obviamente tienes que cambiar el “naytech.es” a tu proprio domain pero ya está hecho!

¡Más fácil que tu pelo! O sea al menos más fácil que tu idioma, eso es la verdad…

¡Hola al mundo!

¡Hola chicos!

Soy Nay, un informático de Escocía en el área DevOps / Sysadmin. Tengo un grado del universitario en “Ciencia de Ordenadores”, dos años trabajando como ingeniero (la mayoría fue Python), dos años freelance dónde he trabajado en Linux sysadmin (¿administrador de sistemas Linuxes?) y DevOps (Amazon’s AWS y tal) y ahora hago DevOps para una empresa en edimburgo!

El objetivo de este blog es mejorar mi español especialmente en el área informática, escribir artículos technicos para otros españoles y no sé, a lo mejor estaría guay!

Así que si me puedas corregir,  ¡hazlo! o si tengas alguna pregunta me tienes que preguntar.

¡Gracias y bienvenidos!