这是我的配置(Nginx 1.7.x):
server {
listen 8000;
index index.php index.html index.htm;
root /var/www/;
server_tokens off;
chunked_transfer_encoding off;
location ~ \.php$ {
try_files $uri =404;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_keep_conn on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
以及 php-fpm 配置:
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.allowed_clients = 127.0.0.1
pm = ondemand
pm.max_children = 6000;
pm.process_idle_timeout = 5;
chdir = /
security.limit_extensions = .php
php_flag[display_errors] = on
php_flag[display_startup_errors] = on
我有一个 PHP 脚本,用于发送实时数据到客户端。当客户端关闭连接时,我可以看到PID 在 15-20 秒后关闭。我认为这是由于缓冲区和 nginx 的工作方式造成的。
例如,如果我禁用 nginx/fastcgi 缓冲通过关闭 fastcgi_buffering 客户端的连接正在被立即关闭。
然而,nginx 缓冲对我来说非常重要,它可以减少客户端的任何延迟(如果发现)。
那么 nginx/php 有什么办法可以即刻即使我已打开缓冲,当客户端断开连接时是否会收到事件?
谢谢