Nginx auth_request 多次触发,为什么?

Nginx auth_request 多次触发,为什么?

我有一个简单的代理,需要auth_request子请求进行身份验证。经过身份验证的用户随后被代理到 s3 url 来下载文件。

然而我看到的是,每次用户访问代理 URL 时,身份验证子请求似乎都会触发多次。

我不确定这是为什么,我的一个理论是,s3 下载很大,需要下载多个数据包,每个数据包都需要一个单独的身份验证子请求?但这听起来不对,我假设单个身份验证子请求适用于整个会话的生命周期。

我知道身份验证子请求会触发多次,因为我在子请求代码中添加了日志记录功能,该功能可显示每个请求的重复条目。

有人有关于此事的更多信息吗?

下面是我的 nginx 配置(无论有没有该auth_request_set指令都会发生这种情况)

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

问题不在于每个单个请求都发出多个子请求,而在于代理的 S3 服务器响应 206 Partial Content 响应,导致客户端发出后续请求来获取其余内容(需要通过新的子请求正确地重新验证)。

由于 Firebug 在网络日志中将 206 个部分内容链压缩为单个 200,因此没有更早地发现这个问题,所以我没有立即意识到这个问题在幕后发生,直到我注意到当用户代理是 wget 时 S3 不会发出 206 个响应!

相关内容