配置 Apache + fcgi / php-fpm 的最佳方式是什么(在 debian buster 上)
What is best way of configuring Apache + fcgi / php-fpm (on debian buster)
一直想知道应该怎么做。
在以前版本的 apache 上(在 debian 9 中)我就是这样做的。
这样我可以限制 php 池的大小,如果池达到最大值,apache 将对请求进行排队,除非我们在队列中达到 acquire
延迟(此处为 10 秒),否则不会出现错误会吐出来
<IfModule proxy_fcgi_module>
# on previous versions of apache, having enablereuse on socks would hang
# when php reached it's max number of requests (set in fpm pool)
<Proxy "unix:/run/php/pool.php7.3-fpm.sock|fcgi://pool-php-7-3" enablereuse=Off max=5 >
ProxySet connectiontimeout=3 timeout=30 acquire=10
</Proxy>
</IfModule>
<VirtualHost *>
ServerName example.com
DocumentRoot /path/to/docroot
<Directory /path/to/docroot>
Options +Indexes
AllowOverride all
Require all granted
</Directory>
<IfModule proxy_fcgi_module>
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler "proxy:fcgi://pool-php-7-3"
</FilesMatch>
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# CustomLog /dev/null
# ErrorLog /dev/null
</VirtualHost>
现在,在较新版本的 apache 上,我们似乎想要 enablereuse=On
或者性能非常差。
我正试图让它在 VPS 上很好地工作。
感谢有关如何在最新版本的 apache2.4 中定义它的建议
当 php 池达到最大值时让用户多等几秒钟比向他们抛出错误更好。
我以前用这个很好地工作:)
也许我不是在说这是 apache 的写入方式?
我终于发现我问错了自己的问题!
(经常找不到答案)
回到过去,apache 能够处理这个问题,但似乎在最近的版本中它做得不好,因为有更好的方法!!
由于php-fpm 可以处理积压队列,因此无需在apache 级别对其进行控制。 FPM 池管理器可以处理 'first in first out' (aka fifo) 队列,因此不会拒绝连接
查看 /etc/php/7.3/fpm/pool.d/www.conf
中的“开箱即用”,您会找到这些行,只需取消注释行
; Set listen(2) backlog.
; Default Value: 511 (-1 on FreeBSD and OpenBSD)
;listen.backlog = 511
因此,只需告诉 apache fcgi 代理允许多达 511 个...在我的情况下,50 个就足够了,但 511 是默认值并且似乎对我来说效果很好(网站是 WordProuut ~5 pages/s)
<IfModule proxy_fcgi_module>
<Proxy "unix:/run/php/pool.php7.3-fpm.sock|fcgi://pool-php-7-3" enablereuse=Off max=511 >
ProxySet connectiontimeout=3 timeout=30 acquire=10
</Proxy>
</IfModule>
我确实尝试过 enablereuse=On
,但在我看来,当 php-进程达到 pm.max_requests
时,它仍然抛出了一个错误。与 enablereuse=Off
配合得很好
一直想知道应该怎么做。
在以前版本的 apache 上(在 debian 9 中)我就是这样做的。
这样我可以限制 php 池的大小,如果池达到最大值,apache 将对请求进行排队,除非我们在队列中达到 acquire
延迟(此处为 10 秒),否则不会出现错误会吐出来
<IfModule proxy_fcgi_module>
# on previous versions of apache, having enablereuse on socks would hang
# when php reached it's max number of requests (set in fpm pool)
<Proxy "unix:/run/php/pool.php7.3-fpm.sock|fcgi://pool-php-7-3" enablereuse=Off max=5 >
ProxySet connectiontimeout=3 timeout=30 acquire=10
</Proxy>
</IfModule>
<VirtualHost *>
ServerName example.com
DocumentRoot /path/to/docroot
<Directory /path/to/docroot>
Options +Indexes
AllowOverride all
Require all granted
</Directory>
<IfModule proxy_fcgi_module>
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler "proxy:fcgi://pool-php-7-3"
</FilesMatch>
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# CustomLog /dev/null
# ErrorLog /dev/null
</VirtualHost>
现在,在较新版本的 apache 上,我们似乎想要 enablereuse=On
或者性能非常差。
我正试图让它在 VPS 上很好地工作。
感谢有关如何在最新版本的 apache2.4 中定义它的建议 当 php 池达到最大值时让用户多等几秒钟比向他们抛出错误更好。 我以前用这个很好地工作:)
也许我不是在说这是 apache 的写入方式?
我终于发现我问错了自己的问题! (经常找不到答案)
回到过去,apache 能够处理这个问题,但似乎在最近的版本中它做得不好,因为有更好的方法!!
由于php-fpm 可以处理积压队列,因此无需在apache 级别对其进行控制。 FPM 池管理器可以处理 'first in first out' (aka fifo) 队列,因此不会拒绝连接
查看 /etc/php/7.3/fpm/pool.d/www.conf
中的“开箱即用”,您会找到这些行,只需取消注释行
; Set listen(2) backlog.
; Default Value: 511 (-1 on FreeBSD and OpenBSD)
;listen.backlog = 511
因此,只需告诉 apache fcgi 代理允许多达 511 个...在我的情况下,50 个就足够了,但 511 是默认值并且似乎对我来说效果很好(网站是 WordProuut ~5 pages/s)
<IfModule proxy_fcgi_module>
<Proxy "unix:/run/php/pool.php7.3-fpm.sock|fcgi://pool-php-7-3" enablereuse=Off max=511 >
ProxySet connectiontimeout=3 timeout=30 acquire=10
</Proxy>
</IfModule>
我确实尝试过 enablereuse=On
,但在我看来,当 php-进程达到 pm.max_requests
时,它仍然抛出了一个错误。与 enablereuse=Off