响应来自哪里-Nginx?应用程式? Kubernetes?其他?

时间:2019-05-08 14:27:06

标签: spring nginx kubernetes jetty google-kubernetes-engine

我有一个在谷歌kubernetes集群中提供RESTFull API的应用程序。 在应用程序的前面,我有一个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的日志(但是当我进行顺序测试1..1000时,有testId = 9和testId = 11的日志)

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 :(得分:0)

由于配置limit_req_zone $binary_remote_addr zone=one:10m rate=4r/s;limit_req zone=one burst=10;,您看到的错误来自Nginx

在此处了解更多信息:http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

您是否出于某种理由放了它?