nginx和proxy_pass - 发送连接:关闭标头

时间:2011-02-24 06:01:43

标签: http nginx

nginx似乎正在替换上游发送的Connection: close标头,并将其替换为Connection: keep-alive标头。有什么方法可以覆盖它吗?

http {
  upstream main {
    server 127.0.0.1:8000;
  }
  server {
    listen 443;
    ssl on;
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    location / {
      proxy_pass http://main;
    }
    location /find {
      proxy_pass http://main;
      proxy_buffering off;
    }
  }
}

5 个答案:

答案 0 :(得分:3)

设置keepalive_requests 0;说服nginx发送Connection: close

答案 1 :(得分:2)

Connection标头特定于连接。

来自HTTP / 1.1规范,

  

Connection general-header字段允许发送方指定该特定连接所需的选项,并且代理不得通过其他连接进行通信。

所以nginx发送的内容与从上游发送的内容无关。以下是一些选项:

如果您不想重复使用连接,

keepalive_requests 0可以正常工作。

keepalive_disable ua适用于特定的用户代理。

并且this answer正常工作。

答案 2 :(得分:1)

如果您使用的是PHP-FPM或PHP FastCGI,请查看fastcgi_finish_request()

  

这个功能可以让你加快一些php的实现   查询。当有动作时,可以加速   不影响服务器响应的脚本执行过程。对于   例如,在页面具有后,可以在memcached中保存会话   已形成并传递给Web服务器。 fastcgi_finish_request()是一个   php功能,停止响应输出。 Web服务器立即   开始将响应“慢慢地,悲伤地”传递给客户端和php   同时可以在一个上下文中做很多有用的事情   查询,例如保存会话,转换下载的视频,   处理各种统计等。

http://php-fpm.org/wiki/Features#fastcgi_finish_request.28.29

答案 3 :(得分:0)

在安全服务器上禁用keepalive会增加服务器负载,请检查此文档上的“HTTPS服务器优化”会话。 http://nginx.org/en/docs/http/configuring_https_servers.html

我可能想设置一个小的keepalive_requests值并设置一个keepalive_requests

答案 4 :(得分:0)

您可以修补NGINX。以FastCGI为例,添加

if (strcmp((char *)h->key.data, "Connection") == 0 && strcmp((char *)h->value.data, "close") == 0) {
     ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "Set Connection: close");
     r->keepalive = 0;
}
src/http/modules/ngx_http_fastcgi_module.c行1977中,在标题解析器之后