我按如下方式配置 nginx(缩短):
http {
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
server {
limit_conn conn_zone 50;
limit_conn_log_level error;
limit_conn_dry_run off;
...
}
...
}
现在我的网站通过 1 个 TCP 连接发出约 180 个请求。我已经验证只使用了 1 个连接。我把$connection设置为nginx访问日志格式。在访问日志中,我可以看到 180 个请求中的每一个都是通过同一连接发出的($connection id 始终相同)。我的网络浏览器显示相同,仅使用 1 个连接 (id)。
在我的 nginx error.log 中,我可以看到约 30 个请求达到了连接限制:
2024/07/01 14:57:12 [error] 1338808#1338808: *4560 limiting connections by zone "conn_zone", client: xxx, server: xxx, request: "GET /jsonapi.php/v1/xxx HTTP/2.0", host: "xxx", referrer: "xxx"
现在我不明白当我只使用一个连接时如何达到 50 个连接限制? nginx 到底是如何统计连接数的?
终于找到问题了,来自nginx docs:
在 HTTP/2 和 HTTP/3 中,每个并发请求都被视为一个单独的连接。