【问题标题】:How to make Nginx mirror module not wait for response如何使 Nginx 镜像模块不等待响应
【发布时间】:2018-08-02 00:55:58
【问题描述】:

我们正在尝试使用 Nginx 的模块 ngx_http_mirror_module 将流量镜像到我们的新网络服务器。

这似乎会导致我们的产品网络服务器出现延迟问题。开启镜像 X 小时后,我们观察到 Nginx 错误日志“2018/07/25 15:55:54 [error] 20#0: *12190535 upstream timed out (110: Connection timed out) while sent to client, client: 10.128.0.37,服务器:,请求:“POST /v1/query?v=20170712 HTTP/1.1”,上游:“http://10.3.248.222:8080//api/query?v=20170712”,主机:“loadtest.xxx.yyy”。

我推测 ngx_http_mirror_module 可能同时持有与原始上游的 TCP 连接,以及与镜像目标的连接。

因此,我想知道如何让 Nginx 镜像模块不等待响应。或者,如何关闭原始上游的打开套接字。

欣赏任何见解!

【问题讨论】:

标签: nginx


【解决方案1】:

你的猜测确实是正确的。但是,有一个使用超时的解决方法。您可以明确告诉 Nginx 在 200 毫秒后不要等待来自镜像位置的响应并终止连接。

upstream backend {
    server backend.local:10000;
}

upstream test_backend {
    server test.local:20000;
}

server {
    server_name proxy.local;
    listen 8000;

    location / {
        mirror /mirror;
        proxy_pass http://backend;
    }

    location = /mirror {
        internal;
        proxy_pass http://test_backend$request_uri;
        proxy_connect_timeout 200ms;
        proxy_read_timeout 200ms;
    }

}

虽然我不确定终止连接的成本,所以最好部署一个轻量级网络服务器,将您的请求对象排队以供以后异步使用。

这确实使事情变得有些复杂,但值得注意的是,您可以扩展轻量级 Web 服务器、队列和消费者以满足您的生产需求。

【讨论】:

    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2020-03-07
    • 2022-01-06
    相关资源
    最近更新 更多