У меня есть моя конфигурация конфигурации для обработки множества запросов GET, которые отображают пиксели, которые прекрасно работают для обработки аналитики и разбора строк запроса для регистрации. С дополнительным сторонним потоком данных мне нужно обработать POST-запрос к заданному URL-адресу, который имеет JSON в ожидаемом формате регистрации внутри его тела запроса. Я не хочу использовать вторичный сервер с proxy_pass
и просто хочу записать весь ответ в связанный файл журнала, например, что он делает с запросами GET. Фрагмент кода, который я использую, выглядит следующим образом:
GET-запрос (который прекрасно работает):
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;
}
Вот то, что я пытаюсь сделать:
POST-запрос (который не работает):
location /bk {
log_format bk_tracking $request_body;
access_log /mnt/logs/nginx/bk.access.log bk_tracking;
}
Керлинг curl http://myurl/bk -d name=example
дает мне страницу 404 не найдена.
Тогда я попробовал:
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
дает мне 405 Not Allowed
.
Моя текущая версия nginx/0.7.62
. Любая помощь в правильном направлении очень ценится! Спасибо!
UPDATE
Так что теперь мой пост выглядит так:
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; }
Он правильно регистрирует данные поста, но возвращает 404 на конце запроса. Если я изменю код выше, чтобы вернуть 200, например, так:
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; }
Затем он возвращает 200
правильно, но больше не записывает данные записи.
ДРУГОЕ ОБНОВЛЕНИЕ
Кинда нашла рабочее решение. Надеюсь, это поможет другим на их пути.