Откуда приходит ответ - Nginx?Приложение?Kubernetes?Другой? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть приложение, предоставляющее 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, но обе они имеют одну и ту же проблему.

Понятия не имею, что и где я должен проверить, чтобы найти причину проблемы.

1 Ответ

0 голосов
/ 08 мая 2019

Ошибка, которую вы видите, исходит от Nginx из-за конфигов limit_req_zone $binary_remote_addr zone=one:10m rate=4r/s; и limit_req zone=one burst=10;

Подробнее читайте здесь: http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

Вы указали это по причине?

...