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…