【发布时间】:2019-05-08 14:27:06
【问题描述】:
我有一个在谷歌 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
后端应用程序是在 spring 中编写并使用 jetty 运行的。 Nginx 版本已从 1.13.X 更新到 1.15.12,但两者都有相同的问题。
我不知道应该检查什么以及在哪里找到问题的原因。
【问题讨论】:
标签: spring nginx kubernetes jetty google-kubernetes-engine