# Здесь обрабатывается запрос на скачивание файла.
# урл имеет вид example.com/download/-encrypted-file-id-
location /download {
set $limit_rate 10k;
limit_conn lim 1;
# передаем запрос бэк-енду на расшифровку. В ответе ожидаем хедер X-Accel-Redirect
proxy_pass 127.0.0.1:8888/nginxds/linkDecoder?domain=$host&path=$request_uri;
proxy_set_header X-Real-IP $remote_addr;
add_header Content-Length $content_length;
add_header Content-Disposition attachment;
}
# В этот локейшн переходим по хедеру X-Accel-Redirect от бэк-енда (см. предыдущий локейшн)
# Предполагается, что все раздаваемые файлы лежат в папке /storage
location /storage {
set $postURI $uri;
set $postIP $remote_addr;
set $postHOST $host;
post_action @postDownload;
root /;
internal;
}
# по завершению скачивания файла передаем на бэк-енд переменные установленные
# в предыдущем локейшыне и отданный объем (в байтах)
location @postDownload {
proxy_pass 127.0.0.1:8888/nginxds/postDownload?domain=$postHOST&uri=$postURI;
proxy_set_header X-Real-IP $postIP;
proxy_set_header BytesSent $body_bytes_sent;
}