Registrazione dei dati POST da $ request_body

Ho il mio setup di configurazione per gestire una serie di richieste GET che rendono i pixel che funzionano bene per gestire l’analisi e analizzare stringhe di query per la registrazione. Con un stream di dati di terze parti aggiuntivo, ho bisogno di gestire una richiesta POST a un determinato URL che ha JSON in un formato di registrazione previsto all’interno del corpo della richiesta. Non voglio utilizzare un server secondario con proxy_pass e voglio solo registrare l’intera risposta in un file di registro associato come quello che fa con le richieste GET. Un frammento di codice che sto usando assomiglia al seguente:

Richiesta GET (che funziona alla grande):

 location ^~ /rl.gif { set $rl_lcid $arg_lcid; if ($http_cookie ~* "lcid=(.*\S)") { set $rl_lcid $cookie_lcid; } empty_gif; log_format my_tracking '{ "guid" : "$rl_lcid", "data" : "$arg__rlcdnsegs" }'; access_log /mnt/logs/nginx/my.access.log my_tracking; rewrite ^(.*)$ http://my/url?id=$cookie_lcid? redirect; } 

Ecco un po ‘quello che sto cercando di fare: richiesta POST (che non funziona):

 location /bk { log_format bk_tracking $request_body; access_log /mnt/logs/nginx/bk.access.log bk_tracking; } 

Curling curl http://myurl/bk -d name=example mi dà una pagina 404 non trovata.

Poi ho provato:

 location /bk.gif { empty_gif; log_format bk_tracking $request_body; access_log /mnt/logs/nginx/bk.access.log bk_tracking; } 

curl http://myurl/bk.gif -d name=example mi dà 405 Not Allowed .

La mia versione attuale è nginx/0.7.62 . Qualsiasi aiuto nella giusta direzione è molto apprezzato! Grazie!

AGGIORNAMENTO Quindi ora il mio post ha questo aspetto:

 location /bk { if ($request_method != POST) { return 405; } proxy_pass $scheme://127.0.0.1:$server_port/dummy; log_format my_tracking $request_body; access_log /mnt/logs/nginx/my.access.log my_tracking; } location /dummy { set $test 0; } 

Sta registrando correttamente i dati del post, ma restituisce un 404 all’estremità dei richiedenti. Se cambio il codice sopra riportato per restituire un 200 in questo modo:

 location /bk { if ($request_method != POST) { return 405; } proxy_pass $scheme://127.0.0.1:$server_port/dummy; log_format my_tracking $request_body; access_log /mnt/logs/nginx/my.access.log my_tracking; return 200; } location /dummy { set $test 0; } 

Quindi restituisce correttamente il 200 , ma non registra più i dati del post.

UN ALTRO AGGIORNAMENTO Kinda ha trovato una soluzione funzionante. Speriamo che questo possa aiutare gli altri sulla loro strada.