【问题标题】:What is best way of configuring Apache + fcgi / php-fpm (on debian buster)配置 Apache + fcgi / php-fpm 的最佳方法是什么(在 debian buster 上)
【发布时间】:2019-09-26 14:46:45
【问题描述】:

一直想知道这应该怎么做。

在以前版本的 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 的写法来表述这个?

【问题讨论】:

    标签: php apache fpm mod-fcgid


    【解决方案1】:

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

    所以回到过去,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
    

    所以只需告诉 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-process 到达pm.max_requests 时它仍然抛出错误。与enablereuse=Off 配合得很好

    【讨论】: