[Nginx,Си] выплнить действия после отдачи файла
Модератор: Fastman
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
[Nginx,Си] выплнить действия после отдачи файла
идет раздача файлов через Nginx
стоит задача выполнить какие-то действия (perl скрипт запустить или в базу записать и нужно знать какой это файл и путь к нему) после того как файл отдался клиенту
я знаю что можно при начале скачивания выполнить скрипт
а как быть если надо в конце отдачи?
1) может ли есть такая реализаци я в Nginx встроннеая такая?
2) если исходники Си посмотреть реально ли это сделать? (точнее реально ли найти участок в котором можно запустить скрипт лили выполнить действия?)
стоит задача выполнить какие-то действия (perl скрипт запустить или в базу записать и нужно знать какой это файл и путь к нему) после того как файл отдался клиенту
я знаю что можно при начале скачивания выполнить скрипт
а как быть если надо в конце отдачи?
1) может ли есть такая реализаци я в Nginx встроннеая такая?
2) если исходники Си посмотреть реально ли это сделать? (точнее реально ли найти участок в котором можно запустить скрипт лили выполнить действия?)
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- ефрейтор
- Сообщения: 61
- Зарегистрирован: 2009-11-27 22:29:58
Re: [Nginx,Си] выплнить действия после отдачи файла
1) отпадает точно, по сенду там(в исходниках ни чего не проверяется и не ставятся флаги)
2)исходники написаны одним проектом под кучу ос )))) (в принципе после просмотра кода через 20-30 минут это не вызывает проблем), самый простой способ обратиться к автору на сайте(http://sysoev.ru/) всё есть, даже можно денишки кинуть, самим разобраться можно если конечно вам оно очень надо
, без консультации разраба не обойдётесь в любом случае, а он соберёт вам версию за минимальную плату я думаю.
2)исходники написаны одним проектом под кучу ос )))) (в принципе после просмотра кода через 20-30 минут это не вызывает проблем), самый простой способ обратиться к автору на сайте(http://sysoev.ru/) всё есть, даже можно денишки кинуть, самим разобраться можно если конечно вам оно очень надо

- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: [Nginx,Си] выплнить действия после отдачи файла
я нашел для этого в нгинкс есть post_action
не могу найти ни где, где этот хэш (хэш число, временный ключ который был послан в nginx для скачиванию файла) который идет в url во внутреннем редиректе?
т.е. мне нужно передать число байт и хэш в скрипт...
Код: Выделить всё
location ~* ^/media/.+\.(mp3|wma|ogg|ape|flac)$ {
post_action /counter.php?bs=$body_bytes_sent;
}
не могу найти ни где, где этот хэш (хэш число, временный ключ который был послан в nginx для скачиванию файла) который идет в url во внутреннем редиректе?
т.е. мне нужно передать число байт и хэш в скрипт...
-
- ефрейтор
- Сообщения: 61
- Зарегистрирован: 2009-11-27 22:29:58
Re: [Nginx,Си] выплнить действия после отдачи файла
Интересная и сложная штука на уровне кода, http://abarmotik.livejournal.com/7496.html
тут передают урл на файл и ип в параметрах думаю вам этого вполне хватит для учёта файла.
тут передают урл на файл и ип в параметрах думаю вам этого вполне хватит для учёта файла.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: [Nginx,Си] выплнить действия после отдачи файла
мне нужно отправить (после того как клиент скачет) что-то одно из:
1) хеш который был прислан для разрешения скачивания файла (чтобы идентифицировать скачивание и файл пользователя)
2) или имя отдаваемого файла, но лучше п.1
я не вижу, где тут это есть?
я там вижу только число байт...
1) хеш который был прислан для разрешения скачивания файла (чтобы идентифицировать скачивание и файл пользователя)
2) или имя отдаваемого файла, но лучше п.1
я не вижу, где тут это есть?
я там вижу только число байт...
-
- ефрейтор
- Сообщения: 61
- Зарегистрирован: 2009-11-27 22:29:58
Re: [Nginx,Си] выплнить действия после отдачи файла
Код: Выделить всё
limit_zone lim $binary_remote_addr 10m;
server {
listen 80;
server_name www.example.com;
# Здесь обрабатывается запрос на скачивание файла.
# урл имеет вид http://example.com/download/-encrypted-file-id-
location /download {
set $limit_rate 10k;
limit_conn lim 1;
# передаем запрос бэк-енду на расшифровку. В ответе ожидаем хедер X-Accel-Redirect
proxy_pass http://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 http://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;
}
}
Код: Выделить всё
proxy_pass http://127.0.0.1:8888/nginxds/postDownload?domain=$postHOST&uri=$postURI;
-
- ефрейтор
- Сообщения: 61
- Зарегистрирован: 2009-11-27 22:29:58
Re: [Nginx,Си] выплнить действия после отдачи файла
По поводу хеш я не в теме, но прочтите статью по подробнее в ней описывается не по мелочам конечно, но довольно подробно то что вы хотите, то что вы имеете ввиду под хеш там описывается как шифрованная ссылка на файл, которую передают на рас шифратор и получают путь на файл,
Схема работы:
* сервер генерит ссылку, шифруя в ней ИД файла и IP юзера
* по ссылке запрос пользователя попадает в лапы nginx'у
* nginx перенаправляет запрос на бэк-енд сервер
* бэк-енд расшифровывает ссылку и возвращает нгинксу путь к файлу
* нгинкс раздает файл и по завершению отправляет отчет на бэк-енд.
Схема работы:
* сервер генерит ссылку, шифруя в ней ИД файла и IP юзера
* по ссылке запрос пользователя попадает в лапы nginx'у
* nginx перенаправляет запрос на бэк-енд сервер
* бэк-енд расшифровывает ссылку и возвращает нгинксу путь к файлу
* нгинкс раздает файл и по завершению отправляет отчет на бэк-енд.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: [Nginx,Си] выплнить действия после отдачи файла
не вижу, где в этом примере название файла или хеш ключ?
-
- ефрейтор
- Сообщения: 61
- Зарегистрирован: 2009-11-27 22:29:58
Re: [Nginx,Си] выплнить действия после отдачи файла
Хорошо объясни мне тогда, что по твоему хранит переменная $postURI ?
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: [Nginx,Си] выплнить действия после отдачи файла
я добавил строку
в полностью рабочий конфиг
но запрос не отправился после того как я скачал файл, в логах apache на http://www.site.com/ в error и access нету запроса
Код: Выделить всё
post_action http://www.site.com/to_nginx?bs=$body_bytes_sent;
Код: Выделить всё
# Free
location /download_f/ {
alias /home/file/cgi-bin/uploads/;
internal;
set $limit_rate 40k;
limit_conn one 1;
post_action http://www.site.com/to_nginx?bs=$body_bytes_sent;
}
# Registered
location /download_r/ {
alias /home/files/cgi-bin/uploads/;
internal;
set $limit_rate 40k;
limit_conn one 1;
post_action http://www.site.com/to_nginx?bs=$body_bytes_sent;
}
# Premium
location /download_p/ {
alias /home/file/cgi-bin/uploads/;
internal;
#set $limit_rate 500k;
limit_conn one 50;
post_action http://www.site.com/to_nginx?bs=$body_bytes_sent;
}
-
- ефрейтор
- Сообщения: 61
- Зарегистрирован: 2009-11-27 22:29:58
Re: [Nginx,Си] выплнить действия после отдачи файла
Не являюсь специалистом в скриптовых языках, даже не знаю какой он тут толи perl толи php может ещё какой...
Но различия между передачами данных в другие скрипты:
post_action http://www.site.com/to_nginx?bs=$body_bytes_sent;
и
proxy_pass http://127.0.0.1:8888/nginxds/postDownl ... i=$postURI;
явно вижу, тем более что если разбирать скрипты те которые в интернете и то что выше я приводил, по команде post_action мы переходим в часть кода этого скрипта:
которая выполняется после завершения не кого действия, а вот везде передают в другие скрипты(странички или модули) передаются при помощи proxy_pass.
Этот раздел форума посвящён C/C++ переведите тему, рас выяснилось что исходники править не надо) дорога вам в разделы скриптов тут есть такой...
Кстати на форуме http://forum.nginx.org/, post_action многие пользуются и вроде бы всё работает.
ПЕРЕВЕДИТЕ ЭТУ ТЕМУ.
Но различия между передачами данных в другие скрипты:
post_action http://www.site.com/to_nginx?bs=$body_bytes_sent;
и
proxy_pass http://127.0.0.1:8888/nginxds/postDownl ... i=$postURI;
явно вижу, тем более что если разбирать скрипты те которые в интернете и то что выше я приводил, по команде post_action мы переходим в часть кода этого скрипта:
Код: Выделить всё
location @postDownload {
proxy_pass http://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;
}
Этот раздел форума посвящён C/C++ переведите тему, рас выяснилось что исходники править не надо) дорога вам в разделы скриптов тут есть такой...
Кстати на форуме http://forum.nginx.org/, post_action многие пользуются и вроде бы всё работает.
ПЕРЕВЕДИТЕ ЭТУ ТЕМУ.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: [Nginx,Си] выплнить действия после отдачи файла
да, забыл написать решение
...вот так:
...вот так:
Код: Выделить всё
# Premium
location /download_p/ {
alias /home/files/cgi-bin/uploads/;
internal;
#set $limit_rate 500k;
limit_conn one 50;
set $postURI $uri;
set $postIP $remote_addr;
set $postHOST $host;
post_action @postDownload;
}
location @postDownload {
proxy_pass http://193.201.81.40/to_nginx?bs=$body_bytes_sent&domain=$postHOST&uri=$postURI;
proxy_set_header X-Real-IP $postIP;
proxy_set_header BytesSent $body_bytes_sent;
}