【问题标题】:Where the response is comming from - Nginx? App? Kubernetes? Other?响应来自哪里 - Nginx?应用程序? Kubernetes?其他?
【发布时间】: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


    【解决方案1】:

    您看到的错误来自 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

    你说的有道理吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多