Answer the question
In order to leave comments, you need to log in
Nginx and file sharing?
I use nginx on the server for controlled distribution of files ( wiki.nginx.org/XSendfile) The
task was to find out whether the user downloaded the file completely or not (for example, the download was interrupted or just canceled the download), but I have no idea how to do it. Does the habra community have any suggestions (the option with distributing a script for php/python/perl/etc is not accepted)?
upd: post_action (e.g. abarmotik.livejournal.com/7496.html )
# Здесь обрабатывается запрос на скачивание файла.<br/>
# урл имеет вид <a href="http://example.com/download/-encrypted-file-id-">example.com/download/-encrypted-file-id-</a><br/>
location /download {<br/>
set $limit_rate 10k;<br/>
limit_conn lim 1;<br/>
<br/>
# передаем запрос бэк-енду на расшифровку. В ответе ожидаем хедер X-Accel-Redirect <br/>
proxy_pass <a href="http://127.0.0.1">127.0.0.1</a>:8888/nginxds/linkDecoder?domain=$host&path=$request_uri;<br/>
proxy_set_header X-Real-IP $remote_addr;<br/>
<br/>
add_header Content-Length $content_length;<br/>
add_header Content-Disposition attachment;<br/>
}<br/>
<br/>
# В этот локейшн переходим по хедеру X-Accel-Redirect от бэк-енда (см. предыдущий локейшн)<br/>
# Предполагается, что все раздаваемые файлы лежат в папке /storage<br/>
location /storage {<br/>
set $postURI $uri;<br/>
set $postIP $remote_addr;<br/>
set $postHOST $host;<br/>
<br/>
post_action @postDownload;<br/>
<br/>
root /;<br/>
internal;<br/>
}<br/>
<br/>
# по завершению скачивания файла передаем на бэк-енд переменные установленные<br/>
# в предыдущем локейшыне и отданный объем (в байтах)<br/>
location @postDownload {<br/>
proxy_pass <a href="http://127.0.0.1">127.0.0.1</a>:8888/nginxds/postDownload?domain=$postHOST&uri=$postURI;<br/>
proxy_set_header X-Real-IP $postIP;<br/>
proxy_set_header BytesSent $body_bytes_sent;<br/>
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question