在任何由NGINX提供的响应中,如何删除“Connection: keep-alive”头?
我们每月为基于RTB的广告服务从NGINX向不到10个客户端提供100B+/month的子100字节响应。我们试图最小化开销(数据大小)以节省带宽成本。我们不想让NGINX关闭连接,只是从标头中删除它。客户端不是浏览器,并将根据HTTP/1.1规范保持连接打开状态。
我们已成功使用HttpHeadersMoreModule从我们的“无操作”响应(204)中删除了默认响应标头。它看起来像这样:
我们希望删除其他标题,使其看起来像这样:
我们的keepalive_timeout没有设置第二个值。根据NGINX HttpCoreModule documentation,如果没有这个[第二个]参数,nginx不会发送Keep-Alive头部信息。我们的设置是:
我们每月为基于RTB的广告服务从NGINX向不到10个客户端提供100B+/month的子100字节响应。我们试图最小化开销(数据大小)以节省带宽成本。我们不想让NGINX关闭连接,只是从标头中删除它。客户端不是浏览器,并将根据HTTP/1.1规范保持连接打开状态。
我们已成功使用HttpHeadersMoreModule从我们的“无操作”响应(204)中删除了默认响应标头。它看起来像这样:
HTTP/1.1 204 No Content
Connection: keep-alive
我们希望删除其他标题,使其看起来像这样:
HTTP/1.1 204 No Content
我们的keepalive_timeout没有设置第二个值。根据NGINX HttpCoreModule documentation,如果没有这个[第二个]参数,nginx不会发送Keep-Alive头部信息。我们的设置是:
keepalive_timeout 60s;
我们已经尝试使用并设置了http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_headers和http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers:
more_clear_headers 'Connection';
more_clear_input_headers 'Connection';
我们也尝试过:
rewrite_by_lua '
ngx.req.clear_header("Connection")
';
甚至连:
more_clear_headers 'Connection*';
但我们仍然看到了头部信息。我们发送了很多响应,以至于连接头部实际上每个月会花费我们200美元。
非常感谢您的帮助。
相关和有用的链接: Nginx和原始头部
Connection
头部是违反HTTP/1.1协议的。虽然在HTTP/1.0中这样做是合法的。但是,如果客户端在超时之前发起多个请求,额外的TCP握手流量将消耗比头部几个字节更多的带宽和服务器资源。但是,如果坚持这样做,您也可以通过设置reset_timedout_connection on
和keepalive_requests 1
来不优雅地终止TCP会话,以避免4次TCP关闭。然而,这都是对协议的滥用。 - undefined