2015-06-08 9 views
6

sto cercando una soluzione per salvare i dati inviati tramite http (ad esempio come POST) il più rapidamente possibile (con sovraccarico più basso) tramite nginx (v1.2.9). ho provato la seguente configurazione nginx, ma non vedo alcun file scritti nella directory:il modo migliore per salvare la richiesta nginx come file?

server { 
    listen 9199; 
    location /saveme { 
    client_body_in_file_only on; 
    client_body_temp_path /tmp/bodies; 
    } 
} 

quello che sto facendo di sbagliato? e/o c'è un modo migliore per farlo? (i dati scritti dovrebbero idealmente essere un file per richiesta e non importa se sono abbastanza "grezzi" in natura. la post-elaborazione dei file verrà eseguita tramite un processo separato tramite una coda.)

+0

È necessario configurare una cache, le risposte verranno quindi scritte sul disco. – itpp13

+0

client_body_in_file_only riguarda solo BODY, ma hai richiesto la RICHIESTA in materia, per favore chiarisci. Sei sicuro di aver postato richieste con il corpo? –

+0

@alexander il mio desiderio è di essere in grado di POST per esempio un modulo e di avere il contenuto del modulo scritto in un file. non ha bisogno di avere tutti i dati dalla richiesta (ad esempio intestazioni), ma il contenuto sarebbe sufficiente, in qualsiasi formato (raw va bene). – Mumonkan

risposta

2

Questa domanda è già stata answered here:

In sostanza, è necessario combinare log_format e fastcgi_pass. È quindi possibile utilizzare la direttiva access_log, ad esempio, per specificare dove eseguire il dump della variabile salvata.

location = /saveme { 
    log_format postdata $request_body; 
    access_log /var/log/nginx/postdata.log postdata; 
    fastcgi_pass php_cgi; 
} 

Potrebbe anche funzionare con il vostro metodo, ma penso che ti manca client_body_buffer_size e `client_max_body_size

+0

Grazie. Non ho il tempo di controllare la tua soluzione adesso, ma penso che potresti comunque ottenere i punti di ricompensa di taglie:) – Steven2163712

0

Vuoi dire salvare la cache per la post HTTP, mentre l'accesso a qualcuno e file di richiesta e memorizzare su HDD piuttosto che la memoria ? Posso suggerire di utilizzare proxy_cache_path e proxy_cache. La direttiva proxy_cache_path imposta il percorso e la configurazione della cache e la direttiva proxy_cache la attiva.

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g 
       inactive=60m use_temp_path=off; 
server { 
... 
    location/{ 
     proxy_cache my_cache; 
     proxy_pass http://my_upstream; 
    } 
} 
  • La directory del disco locale per la cache è chiamato/path/to/cache
  • livelli stabilisce una gerarchia di directory a due livelli sotto/path/to/cache/
  • keys_zone imposta up una zona di memoria condivisa per memorizzare le chiavi della cache ei metadati come timer utilizzo
  • MAX_SIZE imposta il limite superiore della dimensione della cache
  • specifica inattive quanto tempo un elemento può rimanere nella cache senza accesso a

    la direttiva proxy_cache attiva la memorizzazione nella cache di tutto il contenuto che corrisponde all'URL del blocco di posizione principale (nell'esempio, /). Puoi anche includere la direttiva proxy_cache in un blocco del server; si applica a tutti i blocchi di posizione per il server che non hanno la propria direttiva proxy_cache.

Problemi correlati