实测 nginx 1.31.6 到上游的长连接:什么都不配时 1000 个请求只用 1 条连接(复用率 99.9%),显式 HTTP/1.0 或 Connection: close 则 1000 条;keepalive 2 在并发 8 时 3000 个请求要 834 条连接,keepalive 32 只要 28 条;后端先关空闲连接的偶发 502 没有复现。
实测 proxy_buffering:开着缓冲时 SSE 流式响应照样每块立刻到达,真正把流攒到最后的是 gzip(第一批 2.09 s 才到);40 MB 响应遇到慢 client,缓冲打开时上游 0.0 s 写完(nginx 在 38.9 MB 的临时文件里替它缓冲),关掉则上游被占 9.2 到 10.1 s。
实测长连接穿过 nginx:不配 Upgrade 与 Connection 头握手被拒(HTTP 426),完整配置后往返 0.18 ms(直连 0.06 ms);proxy_read_timeout 2 s 时心跳 1.5 s 保持、2.5 s 断开;worker_connections 64 时 45 个 WebSocket 只能保持 31 个。
实测网关改写请求头:默认原样转发伪造的 X-Forwarded-For,$remote_addr 才能覆盖;两层网关 realip 只信 L1 时还原出真实来源 ::1,信任范围包含 client 时被伪造的 6.6.6.6 冒充;Host 在 $host、$http_host、默认(u)下后端看到的值各不相同。
实测 nginx 限流:limit_req 同一时刻 30 个请求,无 burst 放行 1 个、burst=5 放行 6 个(排队的每隔约 100 ms 一个)、burst=5 nodelay 6 个都立刻处理;持续 20 个/秒打 10r/s 的限额,burst 5 共放行 55 个;limit_conn 3 在 12 个并发里放行 3 个。
实测 nginx 请求体大小限制:Content-Length 超限的 200 MB 请求也返回 413、不到上游,但 client 仍把 200 MB 发完;chunked 加 proxy_request_buffering off 时上游会收到 1.05 MB 残缺请求体;按 location 放宽到 50m;带 Expect: 100-continue 的 client 超限时不发请求体。
实测 nginx location 匹配:正则胜过普通前缀、^~ 前缀不再试正则、多个正则按文件顺序;URI 先规范化(//、%61、..);这台 macOS 的 nginx 1.31.6 连 ~ 正则也不区分大小写,Linux 容器里的 nginx 1.27.5 区分。
实测 nginx 路径重写:proxy_pass 带 URI 与不带 URI、location 带斜杠与不带斜杠的 6 种组合各得到什么路径(/api/users → /users、/v1users、/x/y);rewrite 无标志等同 last、break 才继续 proxy_pass;带 URI 的 proxy_pass 把 %2F 解码成斜杠。
实测 nginx 与 Envoy 1.39.3 的流量分流:90/10 权重下 split_clients 得到 10.4%、upstream weight 正好 10.0%、Envoy 9.8%;split_clients 用固定 key 时 C 是 0;按请求头和 cookie 定向两个网关结果一致;按用户哈希分流 0 个用户见到两个版本,每个请求独立分流则有 88% 的用户见到。
实测发布策略:金丝雀 5% 错误率的新版本在 1% / 5% 阶段都攒不够 5 个错误,4 次都在 25% 阶段才发现回滚(用户看到 7 到 10 个 503);发现概率取决于 canary 自己收到的请求数(50/s 的服务 1% 比例观察 10 s 为 0.0%);蓝绿切换 reload 后立刻 kill 旧版本会有 3 / 1200 个在途请求失败。
实测网关鉴权:auth_request 对 20 ms 的鉴权服务每个请求多 29 ms(加 5 s 缓存后 0.17 ms、鉴权服务只调用 1 次);撤销令牌后无缓存立刻生效、缓存 5 s 延迟 2.6 s、本地 JWT 要等过期(Envoy 默认还宽限 60 s);鉴权服务挂了无缓存全失败、use_stale 一直放行;不覆盖身份头时后端信了伪造的 admin。
实测 TLS 终止:证书只放叶子时 client 校验失败、fullchain 才通过;握手 RSA 4096 约 4.1 ms 而 ECDSA P-256 约 0.9 ms;会话复用 100 / 100 把握手从 1.35 ms 降到 0.68 ms;到上游重新加密在连接复用时没有额外延迟,新建连接时约多 1.3 ms;proxy_ssl_verify 默认 off。