有人有在 Nginx HTTPS 服务器上监听 443 端口的速率限制经验吗?根据我的测试,速率限制似乎在 Nginx 监听 80 端口时效果很好,但在 HTTPS 上没有得到预期的结果。
我的测试细节:
为了进行测试,我将 Nginx 配置为后端服务器的反向代理。Nginx 配置为监听 443 的 HTTPS 服务器。我们有一个专有工具,它将配置的 HTTPS 请求数(每个连接一个请求)提供给 Nginx,并在测试结束时生成报告。报告列出了返回状态 200 的请求数和返回状态 503 的请求数。
观察1: 根据我对 HTTPS 情况的观察,如果 Nginx 的输入请求速率远高于配置的速率限制,则更多请求会得到处理并返回状态为 200,而不是预期。例如,我在 Nginx 中测试了以下速率限制配置:
limit_req_zone $host zone=perhost:1m rate=100r/s;
limit_req zone=perhost burst=100 nodelay;
测试 1:输入为 250 个请求/秒,速率限制配置为 100r/s,速率限制作品正如预期的那样,平均每秒约有 100 个请求返回 200 个状态
测试2:输入为500请求/秒,速率限制配置为100r/s,速率限制不起作用正如预期的那样,平均每秒约有 150 个请求返回 200 个状态
测试3:输入为600请求/秒,速率限制配置为100r/s,速率限制不起作用正如预期的那样,平均每秒约有 200 个请求返回 200 个状态
测试4:输入为800请求/秒,速率限制配置为100r/s,速率限制不起作用正如预期的那样,平均每秒约有 350 个请求返回 200 个状态
观察2: 另一方面,如果 Nginx 配置为监听 80 端口的 HTTP 服务器,速率限制功能似乎在职的对于相同的测试来说很好。
我不确定基于 HTTPS 的测试会有什么不同。我观察到,使用 HTTP 时,请求处理得非常快,而使用 HTTPS 时,完成事务所需的时间相对较长。此外,在 HTTPS 请求的输入速率较低时,事务完成所需的时间并不长,而当输入速率上升时,延迟会增加,然后速率限制开始出现意外行为。这可能是造成这种差异的原因吗?
有人对这种行为有什么想法吗?