Логирование POST-запросов в nginx

Для разработки периодически возникает необходимость логировать запросы для того, чтобы разобраться в проблеме. Если используете nginx, то можно настроить логирование запросов на его стороне.

Для этого надо создать новый формат лога и выставить его в виртуальном хосте. Также, рекомендую выставить client_body_buffer_size побольше, т.к., если вы превысите стандартный размер в килобайт, то вместо тела запроса будет “-“.

Форматируем лог, в убунту при стандартной установке это файл /etc/nginx/nginx.conf:

# ...

http {
    # ...
    client_body_buffer_size 100K;
    client_header_buffer_size 10k;

    log_format postdata '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$request_body" "$http_referer" '
                '"$http_user_agent" $request_time';
    # ...
}
# ...

И выставляем в виртуальном хосте, например /etc/nginx/sites-enabled/default:

server {
    # ...
    access_log /var/log/nginx/postdata.log postdata;
    # ...
}

Проверяем, что все написали правильно и конфигурация “ок”:

nginx -t

Перезагружаем сервер:

service nginx restart

Делаем запрос и идем смотреть лог /var/log/nginx/postdata.log.

Если у вас не создался лог, проверьте, создана ли директория, где он лежит и есть ли у nginx права на запись в этой директории на этот файл.

devops nginx