Registrar en los logs del servidor web Nginx las cabeceras enviadas por los clientes puede resultar muy útil, sobre todo usando servicios estilo Akamai, Imperva, Radware, etc que funcionan como un proxy reverso para mitigar ataques DOS o balancear carga. Estos envían información extra sobre la petición original en forma de cabeceras HTTP a los servidores destinos que han contratado sus servicios. Recordemos que este tipo de servicios hacen de intermediarios entre las consultas de los visitante y el servidor del contenido.
Por ejemplo los clientes de Imperva pueden utilizar estas cabeceras para registrar información extra sobre las peticiones que los visitantes han realizado.
Para registrarla en los logs de Nginx simplemente usaremos la sintaxis “$http_nombre_cabecera”. Siempre en minúsculas y usando guiones bajos. Vamos a agregar esas tres cabeceras a la configuración estándar de los logs de nginx y llamaremos al formato de logs “imperva_custom”.
log_format imperva_custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"' '"$http_incap_tls_version" "$http_ncap_req_id" "$http_incap_client_ip"';
Indicar al fichero access.log que use el formato definido en “log_format”.
access_log /var/log/nginx/XXX/access.log imperva_custom;
Si se desea probar con el comando curl la nueva configuración del formato de logs se podrían usar estos comandos. Veamos un ejemplo para las cabeceras “X-Forwarded-For” y “X-Real-IP”.
# Sin usar proxy. curl --header "X-Forwarded-For: X.X.X.X" http://www.dominio.com curl --header "X-Real-IP: X.X.X.X" http://www.dominio.com # Usando Proxy Socks5 (ej. www.XXX.com:1234). curl --header "X-Forwarded-For: X.X.X.X" --socks5 www.XXX.com:1234 http://www.dominio.com curl --header "X-Real-IP: X.X.X.X" --socks5 www.XXX.com:1234 http://www.dominio.com