[Nginx,Си] выплнить действия после отдачи файла

12
rtyug
На сайте с 13.05.2009
Offline
263
2604

идет раздача файлов через Nginx

стоит задача выполнить какие-то действия (perl скрипт запустить или в базу записать и нужно знать какой это файл и путь к нему) после того как файл отдался клиенту

я знаю что можно при начале скачивания выполнить скрипт

а как быть если надо в конце отдачи?

1) может ли есть такая реализаци я в Nginx встроенная такая?

2) если исходники Си посмотреть реально ли это сделать? (точнее реально ли найти участок в котором можно запустить скрипт лили выполнить действия?)

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
esetnod
На сайте с 16.07.2009
Offline
134
#1

А логи слушать не вариант?

Быстрый хостинг на SSD от $0.99 (http://just-hosting.ru/) | OpenVZ (http://just-hosting.ru/vds.html) и KVM (http://just-hosting.ru/vds-kvm.html) VDS от $7.95
M
На сайте с 01.12.2009
Offline
235
#2
esetnod:
А логи слушать не вариант?

Уж слушать точно не вариант 😂

Администратор Linux,Freebsd. построения крупных проектов.
rtyug
На сайте с 13.05.2009
Offline
263
#3
esetnod:
А логи слушать не вариант?

в логах разве пишется что файл скачался полностью или не скачался полностью?

K
На сайте с 29.02.2008
Offline
116
kdj
#4

для этого в нгинкс есть post_action

location ~* ^/media/.+\.(mp3|wma|ogg|ape|flac)$ {

post_action /counter.php?bs=$body_bytes_sent;

}

rtyug
На сайте с 13.05.2009
Offline
263
#5
kdj:
для этого в нгинкс есть post_action

location ~* ^/media/.+\.(mp3|wma|ogg|ape|flac)$ {
post_action /counter.php?bs=$body_bytes_sent;
}

спасибо, не видел...

не могу найти, можно ли передать этот временный ключ который был послан в nginx для скачиванию файла? (чтобы идентифицировать конкретный данный файл, т.е. что есть ссылки на файлы...)

K
На сайте с 29.02.2008
Offline
116
kdj
#6

и это можно

используйте встроенные переменные $args, $uri и т.д.

location ~ \.php$ {

set $ouri $uri;

fastcgi ...

post_action /post;

}

location = post {

fastcgi ...

fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$ouri;

}

rtyug
На сайте с 13.05.2009
Offline
263
#7

не могу найти ни где, где этот хэш (хэш число) который идет в url во внутреннем редиректе?

т.е. мне нужно передать число байт и хэш в скрипт

fastcgi - мне не нужен

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#8

Покажите Ваш конфиг, тонче его часть, ответственную за скачивание.

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
rtyug
На сайте с 13.05.2009
Offline
263
#9
Boris A Dolgov:
Покажите Ваш конфиг, тонче его часть, ответственную за скачивание.

вродебы это оно:

                                                                               

#user nobody;
worker_processes 8;
worker_rlimit_nofile 10240;
worker_rlimit_sigpending 32768;

error_log logs/error.log info;

#pid logs/nginx.pid;


events {
worker_connections 2048;
}


http {
include mime.types;
default_type application/octet-stream;

access_log logs/access.log combined;

access_log logs/access.log combined;

#sendfile on;
#tcp_nopush on;
reset_timedout_connection on;

server_tokens off;
autoindex off;

keepalive_timeout 0;
#keepalive_timeout 65;

limit_zone one $binary_remote_addr 10m;
perl_modules perl;
perl_require download.pm;

server {
listen 182;
server_name localhost;
proxy_set_header X-Real-IP $remote_addr;

#charset koi8-r;

location /nstatus {
stub_status on;
#allow 127.0.0.1;
#deny all;
}

location / {
root html;
index index.html index.htm;
}

location /d/ {
perl download::handler;
}

# Free
location /download_f/ {
alias /home/file/cgi-bin/uploads/;
internal;
set $limit_rate 40k;

limit_conn one 1;
}

# Registered
location /download_r/ {
alias /home/files/cgi-bin/uploads/;
internal;
set $limit_rate 40k;
limit_conn one 1;
}

# Premium
location /download_p/ {
alias /home/file/cgi-bin/uploads/;
internal;
#set $limit_rate 500k;
limit_conn one 50;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

}

}

там еще есть perl модуль perl_require download.pm;

rtyug
На сайте с 13.05.2009
Offline
263
#10

там еще есть perl модуль perl_require download.pm;

package download;                                                                                                                                            

use strict;
use nginx;
use Crypt::HCE_MD5;

my $dl_key = "re2lgr5";
my $upload_dir="/home/file/cgi-bin/uploads";

sub handler {
my $r = shift;

my $hce = Crypt::HCE_MD5->new($dl_key,"XFile");
($_) = $r->filename=~/\/(\w+)\/[^\/]+$/;
my $l;
tr|a-z2-7|\0-\37|;
$_=unpack('B*',$_);
s/000(.....)/$1/g;
$l=length;
$_=substr($_,0,$l & ~7) if $l & 7;
$_=pack('B*',$_);

my ($srv_id,$file_id,$usr_id,$dx,$id,$dmode,$i1,$i2,$i3,$i4,$expire) = unpack("SLLSA12AC4L", $hce->hce_block_decrypt($_) );
$dx=sprintf("%05d",$dx);

if($r->remote_addr !~ /^$i1\.$i2\./)
{
$r->internal_redirect("/error_wrong_ip.html");
}
elsif($expire<time)
{
$r->internal_redirect("/error_expired.html");
}
elsif(!-f "$upload_dir/$dx/$id")
{
$r->internal_redirect("/error_nofile.html");
}
else
{
$r->header_out("Content-Disposition","attachment");
$r->internal_redirect("/download_$dmode/$dx/$id?id=$file_id&usr=$usr_id".$r->args);
}

return OK;
}

1;
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий