nginx文档据说如果 fastcgi_keep_conn 没有打开,fastcgi 的 keepalive 就无法工作。但是,我找不到有关此问题的任何进一步详细信息。我已经在整个服务器范围内启用了 keepalive。我正在使用 php-fpm。使用 fastcgi_keep_conn 时,我应该注意哪些问题?
答案1
理论上确实fastcgi_keep_conn
可以提高性能,因为 nginx 和 PHP-FPM 之间的套接字在处理完请求后保持打开状态。因此节省了打开套接字所花费的时间。
总的来说,这会在每个请求上节省几毫秒的时间,所以影响不是很大。
该文档只是意味着您需要在 PHP 脚本块中同时拥有带有选项upstream
的块keepalive
和fastcgi_keep_conn
选项才能使连接保持工作。
基本上,fastcgi_keep_conn
选项告诉 nginx 让 PHP-FPM 在请求之后保持连接打开,而连接keepalive
告诉 nginx 保持连接打开。
答案2
keepalive_requests
您还需要将上游的选项设置为与 php-fpm 相同的数字pm.max_requests
,否则您可能会遇到此问题:
https://stackoverflow.com/a/51457613/10115267
pm.max_requests
基本上,每次 php-fpm 子进程因与 nginx 仍保持连接而重新启动时,您都可能会收到以下错误之一:
读取上游时 readv() 失败(104:对等方重置连接),读取上游响应头时 recv() 失败(104:对等方重置连接)