За последние 24 часа нас посетили 22687 программистов и 1267 роботов. Сейчас ищут 704 программиста ...

nginx отловить завершение отправки данных

Тема в разделе "Прочее", создана пользователем Easy, 30 май 2012.

  1. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    Подскажите, как можно реализовать такую штуку.
    Вот есть правило
    Код (Text):
    1. location /download/ {
    2.     тут всякое...
    3.     rewrite путь к файлу
    4. }
    Если я добавлю сюда строку с ведением логов, и укажу писать туда размер отправленных клиенту данных - то всё прекрасно работает. То есть будел лог и в нём будет сколько данных передано.
    Но потом мне приходится парсить лог по крону, а строк много...
    Я поставил модуль для работы с mysql для того что бы учитывать что файл скачали.
    Но мне ещё нужно записывать в поле юзеру, сколько он скачал. И вот я делаю это по крону парся логи.

    Можно ли как то отловить вот этот самый момент записи в лог в самом nginx и выполнить там mysql_query что бы не писать в лог вообще. То есть получается что не момент записи надо, а запись убрать совсем, а отловить момент когда переменная $bytes_sent содержит число отправленных данных и произошел конец передачи данных или разрыв соединения.

    Добавлено спустя 10 минут 22 секунды:
    Вот нашел такую штуку http://nginx.org/ru/docs/http/ngx_http_addition_module.html
    Код (Text):
    1. синтаксис: add_after_body uri;
    2. умолчание:  —
    3. контекст:   location
    4. Добавляет после тела ответа текст, выдаваемый в результате работы заданного подзапроса.
    Можно ли это использовать? Например указать там другой локейшен в котором будет запись в базу данных или вообще вызывать скрпит пхп, который в ответ не чего не вернёт но от url выполнит вставку в базу?
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.340
    Симпатии:
    44
  3. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    Спасибо!
     
  4. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    Код (Text):
    1. location ~ /d/(.+)/(.+) {
    2.     post_action /on_d?a=$2
    3.     post_action /on_d2/$2
    4. }
    5. location /on_d1 {
    6.     //тут переменная $arg_a пуста
    7. }
    8. location ~ /on_d2/(.+) {
    9.     //тут $1 = "$2"
    10. }