配置Apache+;fcgi/php fpm(在debian buster上)

配置Apache+;fcgi/php fpm(在debian buster上),php,apache,fpm,mod-fcgid,Php,Apache,Fpm,Mod Fcgid,我一直在想应该怎么做 在apache的早期版本(Debian9)中,我就是这样做的 通过这种方式,我可以限制php池的大小,如果池达到最大值,apache将对请求进行排队,除非我们在队列中达到acquiredelay(这里是10秒),否则不会出现错误 <IfModule proxy_fcgi_module> # on previous versions of apache, having enablereuse on socks would hang # when php reach

我一直在想应该怎么做

在apache的早期版本(Debian9)中,我就是这样做的

通过这种方式,我可以限制php池的大小,如果池达到最大值,apache将对请求进行排队,除非我们在队列中达到
acquire
delay(这里是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的早期版本中,在socks上启用可重用性将是挂起的
#当php达到最大请求数时(在fpm池中设置)
ProxySet connectiontimeout=3超时=30获取=10
ServerName example.com
DocumentRoot/path/to/docroot
选项+索引
允许超越所有
要求所有授权
SetHandler“代理:fcgi://pool-php-7-3"
ErrorLog${APACHE_LOG_DIR}/error.LOG
CustomLog${APACHE\u LOG\u DIR}/access.LOG组合
#CustomLog/dev/null
#ErrorLog/dev/null
现在,在apache的最新版本中,我们似乎希望启用
enablereuse=on
或者性能非常差

我正试图让它在VPS上正常工作

感谢您就如何在apache2.4的最新版本中定义这一点提供建议 当php池达到最大值时,让用户多等几秒钟比向用户抛出错误要好。 我以前经常让它工作得很好:)


也许我没有用apache的编写方式来表达这个问题?

我终于发现我问错了自己的问题! (通常在找不到答案时)

所以在过去,apache能够处理这个问题,但在最近的版本中,它似乎做得不好,因为有更好的方法

由于php fpm可以处理积压工作队列,因此无需在apache级别对其进行控制。FPM池管理器可以处理“先进先出”(又名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
所以只要告诉ApacheFCGiProxy允许多达511个。。。在我的例子中,50就足够了,但511是默认值,对我来说似乎很好(网站是一个WordProuut~5页/秒)


ProxySet connectiontimeout=3超时=30获取=10

我确实尝试过
enablereuse=On
,但在我看来,当php进程到达它的
pm.max\u请求时,它仍然抛出了一个错误。与
enablereuse=Off

配合得很好,我终于发现自己问错了问题! (通常在找不到答案时)

所以在过去,apache能够处理这个问题,但在最近的版本中,它似乎做得不好,因为有更好的方法

由于php fpm可以处理积压工作队列,因此无需在apache级别对其进行控制。FPM池管理器可以处理“先进先出”(又名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
所以只要告诉ApacheFCGiProxy允许多达511个。。。在我的例子中,50就足够了,但511是默认值,对我来说似乎很好(网站是一个WordProuut~5页/秒)


ProxySet connectiontimeout=3超时=30获取=10
我确实尝试过
enablereuse=On
,但在我看来,当php进程到达它的
pm.max\u请求时,它仍然抛出了一个错误。与
enablereuse=Off