![Nginx post_action, proxy_pass, Dateidownload verfolgen](https://rvso.com/image/617239/Nginx%20post_action%2C%20proxy_pass%2C%20Dateidownload%20verfolgen.png)
Ich versuche herauszufinden, ob der Download der Datei erfolgreich war oder abgebrochen wurde. Dazu folge ich diesem Artikel.http://www.tipstuff.org/2012/08/Nginx-post-action-to-trigger-successfully-download-file.html
Ich habe alles gleich gemacht, aber ich versuche, Proxy_Pass auf demselben Server zu verwenden, nicht auf einem anderen (wie in diesem Beispiel beim Proxying von Nginx zu Apache). Ist das überhaupt möglich?
Wenn ich mir das Zugriffsprotokoll anschaue, sieht es so aus, als würde es keine Antwort geben. Ich versuche, eine 100 MB große Datei unter /file.bin herunterzuladen. Danke für jeden Vorschlag!
Nginx-Konfiguration
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;
}
}
und /test/test.php um Werte in MySQL einzufügen:
<?php
require_once('../database.php');
mysqli_query($con, "INSERT INTO downloading (info) VALUES ('".mysqli_real_escape_string($con, serialize($_GET))."')");
?>
EDIT: anscheinend hat mir die Verwendung der IP-Adresse anstelle von DNS geholfen, es im access_log zu sehen
[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 "-" "-"
aber es wird immer noch nichts in der Datenbank gespeichert, wenn ich den Browser manuell zu /test/test.php?some=value navigiere, das in der Datenbank gespeichert wird ...
BEARBEITEN: Folgendes erhalte ich jetzt im Fehlerprotokoll:
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"
Antwort1
Ihre Anfrage ist irgendwie falsch. Siehe Ihren Statuscode: 400.
überprüfen Sie Ihre $request - Variable (Alles hinter "/test.php?FileName=")
Sie können verwenden$uristattdessen