2011-02-24 156 views
5

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

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; 
    } 
    } 
}
+0

粘贴你的nginx配置。 – Zimbabao 2011-02-24 06:03:42

+0

你去了:) – nornagon 2011-02-24 06:12:08

回答

3

设置keepalive_requests 0;相信nginx的发送Connection: close

1

看看fastcgi_finish_request()如果你使用PHP-FPM或PHP的FastCGI:

此功能允许您加快实施一些PHP 查询。当脚本执行过程中存在不影响服务器响应的操作时,可以进行加速。对于 示例,可以在页面已经形成 并将其传递到Web服务器之后将会话保存在memcached中。 fastcgi_finish_request()是一个 php功能,用于停止响应输出。网络服务器立即开始将“缓慢而悲伤”的响应转移到客户端,同时在查询的上下文中可以做很多有用的事情,例如保存会话,转换下载的视频, 处理各种统计等等。

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

2

Connection头是特定于一个连接。

从HTTP/1.1规范,

的连接通用头域允许发送方指定所期望用于该特定连接,并且必须不是由代理在进一步的连接来传送的选项。

所以nginx发送的内容与上行发送的内容无关,必须是。这里有一些选项:

keepalive_requests 0工程,如果你永远不想连接重用。

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

this answer工作一个IP。

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年,首部解析器之后。