Pregunta Nginx auth_request dispara varias veces, ¿por qué?


Tengo un proxy simple que requiere una auth_request subrequest para autenticación. Los usuarios autenticados son luego enviados a una url s3 para descargar un archivo.

Sin embargo, lo que estoy viendo es que parece que la autenticación de autenticación se dispara más de una vez por visita de usuario a la url proxy.

No estoy seguro de por qué esto es así, una teoría que tengo es que la descarga de s3 es grande y requiere la descarga de varios paquetes, cada paquete requiere una subpetición de autenticación individual. Pero esto no suena bien, estaba bajo el supuesto de que una sola subpetición de autenticación se aplicaba durante toda la sesión.

Sé que la subrequest de autenticación se activa más de una vez porque en el código de subrequest agregué funciones de registro que muestran entradas duplicadas por cada solicitud.

¿Alguien tiene más información sobre esto?

A continuación está mi configuración de nginx (esto ocurre con y sin el auth_request_set directiva en su lugar)

location ~* ^/(assets/.*) {
    auth_request /auth-proxy; 

    resolver 8.8.8.8;

    proxy_pass_request_headers off;
    proxy_pass_request_body off;
    proxy_redirect off;

    auth_request_set $token $upstream_http_token;

    client_max_body_size 5120M;

    proxy_pass https://bucket-name.s3.amazonaws.com/$1?$token;
}

1


origen




Respuestas:


El problema no era que las múltiples subpeticiones eran problemas por una sola solicitud, sino que el servidor S3 al que se enviaba el proxy respondía con 206 respuestas de contenido parcial, lo que hacía que el cliente emitiera solicitudes posteriores para captar el resto del contenido (que debe reajustarse correctamente). a través de una nueva subrequest).

Esto no se identificó antes porque Firebug estaba condensando la cadena de contenido parcial 206 en un solo 200 en los registros de la red, por lo que no estaba consciente inmediatamente de que esto sucedía detrás de escena hasta que noté que S3 no emitirá 206 respuestas cuando el usuario agente es wget!


1