У меня есть моя настройка конфигурации для обработки множества запросов 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
правильно, но больше не записывает данные сообщения.
ДРУГОЕ ОБНОВЛЕНИЕ Кинда нашел рабочее решение. Надеюсь, это может помочь другим на своем пути.