У меня есть приложение, предоставляющее API RESTFull в кластере Google Kubernetes.
Перед приложением у меня есть nginx, работающий как proxy_pass.
Проблема в том, что один запрос из нескольких тысяч (1000, 2000) содержит неверные данные в ответ (данные других пользователей). Анализ логов показал, что запрос о плохом ответе вообще не поступает в приложение.
Но это касается nginx:
2019/05/08 13:48:03 [warn] 5#5: *28350 delaying request, excess: 0.664, by zone "one", client: 10.240.0.23, server: myportal.com, request: "GET /api/myresource?testId=10 HTTP/1.1"
В то же время в приложении нет журналов для testId = 10 (но есть для testId = 9 и testId = 11, когда я делаю последовательный тест 1..1000)
Конфигурация Nginx почти по умолчанию
limit_req_zone $binary_remote_addr zone=one:10m rate=4r/s;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name myportal.com;
if ($http_x_forwarded_proto = "http") {
return 308 https://$server_name;
}
charset utf-8;
access_log on;
server_tokens off;
location /api {
proxy_pass http://backend-service:8000;
limit_req zone=one burst=10;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Кэширование не настроено (или, может быть, оно включено по умолчанию?).
Приложение работает в среде Google kubernetes, поэтому цепочка запросов выглядит следующим образом
(k8s ingress, nginx-service) -> nginx -> (k8s backend-service) -> backend
Бэкэнд-приложение написано весной и использует причал для запуска.
Версия Nginx была обновлена с версии 1.13.X до версии 1.15.12, но обе они имеют одну и ту же проблему.
Понятия не имею, что и где я должен проверить, чтобы найти причину проблемы.