J'essaie de me connecter POST body, et d'ajouter $request_body
à la log_format
dans http
clause, mais le access_log
commande affiche simplement "-" comme le corps après avoir envoyé POST en utilisant:
curl -d name=xxxx myip/my_location
Mon format_log (dans la clause http
):
log_format client '$remote_addr - $remote_user $request_time $upstream_response_time '
'[$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Ma définition d'emplacement (dans la clause serveur):
location = /c.gif {
empty_gif;
access_log logs/uaa_access.log client;
}
Comment puis-je imprimer les données réelles POST de curl?
Nginx n'analyse pas le corps de la demande du client à moins que cela ne soit vraiment nécessaire, donc il ne remplit généralement pas le $request_body
variable.
Les exceptions sont les suivantes:
Vous devez donc vraiment ajouter le proxy_pass
ou fastcgi_pass
directives à votre bloc.
Le moyen le plus simple est de l'envoyer à Nginx lui-même en tant que serveur proxy, par exemple avec cette configuration:
location = /c.gif {
access_log logs/uaa_access.log client;
# add the proper port or IP address if Nginx is not on 127.0.0.1:80
proxy_pass http://127.0.0.1/post_gif;
}
location = /post_gif {
# turn off logging here to avoid double logging
access_log off;
empty_gif;
}
Si vous vous attendez à recevoir uniquement des valeurs de paires de clés, il peut être judicieux de limiter la taille du corps de la demande:
client_max_body_size 1k;
client_body_buffer_size 1k;
client_body_in_single_buffer on;
J'ai également reçu des erreurs "405 non autorisées" lors des tests à l'aide de empty_gif;
et curl (c'était ok depuis le navigateur), je l'ai changé en return 200;
pour tester correctement avec curl.