当 Nginx 充当反向代理并启用 SSL 时,有什么理由不启用保持活动功能,尤其是在流量突发的情况下(即用户在 20 秒内发出 10 个请求)?具体来说,是否存在关于原子事务或安全性的担忧?
例如,对服务器的请求得到处理,修改了数据库,但 API 机器由于某种原因超时。然后,具有相同签名的同一客户端被发送到 Nginx,但被处理到不同的 API 框,并且发生完全相同的数据库修改,因此它发生了两次。原子事务之类的东西是否与保持活动相关,或者它与应用程序代码更相关?
有任何安全隐患吗?
答案1
Keepalive 对应用程序安全性、请求的原子性或任何接近于这些的事物没有影响 —— 它处于更高的层次。
HTTP keepalive 只是允许客户端重新使用连接来发出更多 HTTP 请求,因此您可以:
open socket
make http request
make http request
...
close socket
而不是
open socket
make http request
close socket
open socket
make http request
close socket
...
无论 KA 是开启还是关闭,您的应用程序都会以完全相同的方式接收 HTTP 请求。
维基百科列出了使用该功能的优点/缺点:http://en.wikipedia.org/wiki/HTTP_persistent_connection
优点
- 更少的 CPU 和内存使用量(因为同时打开的连接更少)。
- 启用请求和响应的 HTTP 流水线。
- 减少网络拥塞(更少的 TCP 连接)。
- 减少后续请求的延迟(无需握手)。
- 可以报告错误,而无需关闭 TCP 连接。