是否有可能告诉nginx通过fastcgi通过一个连接:closures标题通过未改变?

TL; DR :如何告诉nginx从我的php-fpm后端到a)发送一个“Connection:close”标题和b)不缓冲我的回应?

我有一个运行在nginx后面的php-fpm。 一般来说,这样做效果很好,我对此感到满意,但是有几个脚本非常希望向客户端浏览器发送一个“Connection:close”头文件(一个确保一个全新的连接到达HAProxy ),一个是为了能够响应客户端不能处理分块传输编码(.NET有一个错误)。

现在,如果我在PHP中这样做:

<?php header('Connection: close'); echo "foobar"; 

并尝试curl,我得到这个:

 curl -I http://localhost/foo.php HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, 19 Feb 2013 08:07:03 GMT Content-Type: text/html Connection: keep-alive X-Powered-By: PHP/5.4.11 

正如你所看到的,“closures”已经变成了“保持活力”。 但不仅如此:显然,nginx也会caching这个响应并一次性发送(通过发送大量数据,睡眠,发送更多的数据来确认)。

看看这个文档,我发现了在这里代理的“X-Accel-Buffering”头文件。 这个头看起来应该是做我想要的东西(好吧,它不能解决连接头问题,但至less应该停止缓冲),但是,唉,没有运气

 <?php header('Connection: close'); header('X-Accel-Buffering: no'); echo "foobar"; curl -I http://localhost/foo.php HTTP/1.1 200 OK Server: nginx/1.1.19 Date: Tue, 19 Feb 2013 08:16:22 GMT Content-Type: text/html Connection: keep-alive X-Powered-By: PHP/5.4.11 

仍然保持活力,仍然在做缓冲。 我的下一个想法是,也许Ubuntu的默认configuration设置fastcgi_ignore_headers选项,但是,不:

 crazyhat@app99:/etc/nginx$ grep -lri 'ingore_header' * crazyhat@app99:/etc/nginx$ 

所以现在我不知所措,到这里来 – 我没有什么明显的尝试。

  • 操作系统:Ubuntu 12.04
  • Nginx:1.1.19(股票)
  • PHP:PHP 5.4.11(自编)
  • nginxconfiguration为使用php-fpm运行

     upstream php-5.4 { server unix:///opt/php/5.4/var/fpm.socket; } 

    (和5.3,但这与这个讨论无关)

是的,nginx有特殊的命令,命名为“fastcgi_pass_header”。 在位置或HTTP部分尝试下面的代码:

 fastcgi_pass_header Connection-close; 

你提到了HAProxy。 试过在HAProxy方面使用option httpcloseoption forceclose