Si Varnish está configurado como caché predeterminado frente a mi backend de NGINX, ¿cómo puedo verificar en el backend de NGINX la IP original del cliente y tomar una decisión basada en eso?
Quiero permitir un determinado directorio sólo para determinadas IP. Varnish está frente a NGINX, lo que significa que cada solicitud proviene de 127.0.0.1
. Estoy pensando en configurar algún encabezado HTTP personalizado, pero ¿cómo podría verificarlo junto con location ~ /folder/ {}
la sección?
Respuesta1
Por defecto Varnish 4 estableceríaEncabezado X-reenviado-paracomo la IP real del cliente, pero NGINX la ignorará a menos que la configure explícitamente.
Agregue estas líneas a su configuración de nginx en el bloque del servidor que hace uso delngx_http_realip_module:
server {
listen 80;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
<Other Server Options>
}
Si usa Ubuntu, el módulo ya está habilitado de forma predeterminada. Sin embargo, para algunas distribuciones de Linux, es posible que deba habilitarlo o instalarlo manualmente. Puede verificar los módulos configurados mediante:
nginx -V
No olvide recargar nginx después de actualizar la configuración:
sudo service nginx reload
Una vez que nginx pueda obtener la IP real del cliente configurada por Varnish, solo necesita colocar opciones de permitir y denegar en los bloques de ubicación:
server {
<Server Options>
location ~ /folder/ {
allow <IP to whitelist>;
deny all;
<Location Options>
}
}