Nginx post_action, proxy_pass, отслеживание загрузки файла

Nginx post_action, proxy_pass, отслеживание загрузки файла

Я пытаюсь определить, была ли загрузка файла успешной или отменена, следуя этой статьеhttp://www.tipstuff.org/2012/08/Nginx-post-action-to-trigger-successfully-download-file.html

Я сделал все то же самое, но я пытаюсь proxy_pass на тот же сервер, а не на другой (как в этом примере проксирование с nginx на apache), возможно ли это вообще?

Просматривая журнал доступа, я вижу, что он не дает мне никакого ответа. Я пытаюсь загрузить файл размером 100 МБ из /file.bin. Спасибо за каждое предложение!

Конфигурация Nginx

server {
            listen 80;
            server_name www.somepage.com;

            access_log /var/log/nginx/www.somepage.com.access_log;
            error_log /var/log/nginx/www.somepage.com.error_log;

            root /var/www/www.somepage.com;
            index index.php index.htm index.html;

            location / {
              post_action @afterdownload;
            }

            location @afterdownload {
              proxy_pass http://www.somepage.com/test/test.php?FileName=$request&ClientIP=$remote_addr&body_bytes_sent=$body_bytes_sent&status=$request_completion;
              internal;
            }

            location ~ \.php$ {
              fastcgi_pass   127.0.0.1:9000;
              fastcgi_param  SCRIPT_FILENAME /var/www/www.somepage.com$fastcgi_script_name;
              include fastcgi_params;
            }

}

и /test/test.php для вставки значений в mysql:

<?php
require_once('../database.php');

mysqli_query($con, "INSERT INTO downloading (info) VALUES ('".mysqli_real_escape_string($con, serialize($_GET))."')");

?>

EDIT: похоже, использование IP-адреса вместо DNS помогло мне увидеть его в access_log

[01/Sep/2013:12:47:01 +0200] "GET /test/test.php?FileName=GET /file.bin HTTP/1.1&ClientIP=89.176.81.33&body_bytes_sent=14161738&status= HTTP/1.0" 400 166 "-" "-"

но в базе данных по-прежнему ничего не сохраняется, хотя при ручном переходе в браузере по адресу /test/test.php?some=value сохраняется в базе данных...

EDIT: вот что я сейчас получаю в журнале ошибок:

2013/09/02 11:27:23 [error] 9963#0: *658 upstream sent no valid HTTP/1.0 header while reading response header from upstream, client: 89.176.81.33, server: www.server.com, request: "GET /file.bin HTTP/1.1", upstream: "http://94.142.233.120:80/test/test.php?FileName=GET /file.bin HTTP/1.1&ClientIP=89.176.81.33&body_bytes_sent=89244088&status=OK", host: "www.server.com"

решение1

Ваш запрос несколько фиктивен. Посмотрите ваш код статуса: 400.

проверьте вашу переменную $request (все, что находится после "/test.php?FileName=")

Вы можете использовать$uriвместо

Связанный контент