在 nginx 中使用 fastcgi_keep_conn 是否会提高 php-fpm 的性能?

在 nginx 中使用 fastcgi_keep_conn 是否会提高 php-fpm 的性能?

nginx文档据说如果 fastcgi_keep_conn 没有打开,fastcgi 的 keepalive 就无法工作。但是,我找不到有关此问题的任何进一步详细信息。我已经在整个服务器范围内启用了 keepalive。我正在使用 php-fpm。使用 fastcgi_keep_conn 时,我应该注意哪些问题?

答案1

理论上确实fastcgi_keep_conn可以提高性能,因为 nginx 和 PHP-FPM 之间的套接字在处理完请求后保持打开状态。因此节省了打开套接字所花费的时间。

总的来说,这会在每个请求上节省几毫秒的时间,所以影响不是很大。

该文档只是意味着您需要在 PHP 脚本块中同时拥有带有选项upstream的块keepalivefastcgi_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:对等方重置连接)

相关内容