La journalisation des données POST à partir de $request_body

J'ai ma config configuration pour gérer un tas de requêtes GET qui rendre des pixels qui fonctionnent bien pour gérer analytics et d'analyser les chaînes de requête pour la journalisation. Avec une troisième partie du flux de données, j'ai besoin de gérer une requête POST vers une url donnée qui a JSON dans un attendu exploitables d'ici format à l'intérieur du corps de la requête. Je ne veux pas utiliser un serveur secondaire avec proxy_pass et vous voulez juste pour se connecter à l'ensemble de la réponse dans un fichier journal associé, comme ce qu'il fait avec les requêtes GET. Un extrait de code que je suis en utilisant ressemble à ce qui suit:

Requête GET (qui fonctionne très bien):

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;
}

Ici est un peu ce que je suis en train de faire:
Requête POST (qui ne fonctionne pas):

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 me donne une erreur 404 page non trouvée.

Ensuite, j'ai essayé:

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

Curling curl http://myurl/bk.gif -d name=example me donne un 405 Not Allowed.

Ma version actuelle est nginx/0.7.62. Toute aide dans la bonne direction est très apprécié! Merci!

Mise à JOUR
Alors maintenant, mon post ressemble à ceci:

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; }

C'est la journalisation des données post correctement, mais renvoie une erreur 404 sur les demandeurs de la fin. Si je change le code ci-dessus pour retourner un de 200 de la sorte:

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; }

Puis retourner la 200 correctement, mais n'enregistre plus les données post.

UNE AUTRE MISE À JOUR
Un peu trouvé une solution qui fonctionne. J'espère que cela peut aider les autres sur leur chemin.

  • avez-vous obtenir n'importe où avec ça? Je suis face à un problème similaire.
  • Au lieu de faire la set $test 0; essayer de faire return 200; de la tétine, l'emplacement, pour moi, il retourne alors à 200 comme prévu, et j'ai le corps connecté toujours.