我有一个在谷歌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,但是两者都有相同的问题。
我不知道应该在什么地方以及什么地方找到问题的原因。
答案 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
您是否出于某种理由放了它?