Мне нужно регистрировать данные POST. Я добавил в свой конфиг
location / {
echo_read_request_body;
access_log /var/log/nginx/domains/site.post.log postdata;
}
А также добавил это в http
раздел
log_format postdata '$time_local $request_body';
Но в журнале я вижу только местное время и тире:
23/Jul/2016:16:07:49 +0000 -
В чем проблема?
location = / {
log_format postdata $request_body;
access_log /var/log/nginx/domains/site.post.log postdata;
fastcgi_pass php_cgi;
}
nginx не трогает тело запроса клиента, если это не нужно, поэтому он не удовлетворяет переменной $ request_body, есть несколько исключений: 1) если он отправляет запрос на прокси 2) или на сервер fastcgi. Итак, в этом примере выше уловка состоит в том, чтобы заставить nginx поверить, что вы вызовете cgi-скрипт.
По умолчанию Nginx не поставляется с модулем, который содержит echo_read_request_body
. Вам нужно скомпилировать его самостоятельно с помощью модуля.
В нашем случае для регистрации тела запроса нам нужно использовать
echo_read_request_body
команда и$request_body
переменная (содержит тело запроса модуля Echo). Однако этот модуль не распространяется с NGINX по умолчанию, и чтобы иметь возможность использовать его, мы должны собрать NGINX из его исходного кода, построив его с исходным кодом включенного модуля Echo ».
из https://developers.redhat.com/blog/2016/05/23/configuring-nginx-to-log-post-data-on-linux-rhel/
У меня была та же проблема: данные не регистрировались. Я исправил свою проблему, убедившись, что конечная точка что-то вернула. У меня сработало следующее:
location /log {
echo_read_request_body;
access_log /var/log/nginx/postdata.log postdata;
default_type text/html;
echo "POST";
}
Ключ:
default_type
echo