Ubuntu 18.04 Apache2使用Worker模式

2020年04月16日 278点热度 0人点赞 0条评论

前言

Ubuntu服务器安装Apache2默认使用的模式为prefork模式,也就是多进程模式。这个模式有个好处就是比较稳定,但是也有坏处,那就是每个请求都需要一个完整的进程,对内存的消耗比较大。 Apache2提供了好几个运行模式,其中就有worker模式【多进程/多线程模式】,多进程的模式最大的优势就是对内存的消耗比较少,且运行速度相比prefork模式稍微快了些。 但是在Ubuntu下将Apache2改用worker模式,PHP又有问题了,因为PHP默认不支持多线程环境,如果我们第一次尝试使用可以看到下面的提示:
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
字面意思是如果使用worker模式,那么我们的PHP需要执行在thread safe模式,但是Ubuntu下使用apt安装的PHP默认不是thread safe模式,这时候就需要自行编译PHP安装。 经过在网上各种寻找资料(网络上的资料真的是太老了),爬了好多的坑,最终在使用worker模式下成功了,使用了php-cgi模式。

操作

查看当前Apache2的运行模式,可以使用下面命令进行查询,可以看到我当前的运行环境是prefork模式,此时可以使用htop查看存在大量的apache的进程。
$ a2query -M
prefork
下面开始讲prefork模式切换到worker模式,首先安装PHP-CGI相关的依赖:
$ sudo apt install php-cgi libapache2-mod-fcgid
修改VirtualHost里的配置内容,此处以我这里的服务器域名举例:
<VirtualHost *:443>
    ......
    AddHandler fcgid-script .php
    FCGIWrapper /usr/lib/cgi-bin/php .php
    <Directory "/you/site/path/">
            Options +ExecCGI
    </Directory>
    ......
</VirtualHost>
下面开启将Apache2的模式切换到worker模式,执行下面步骤
# 关闭默认的PHP模式,使用VH中配置的CGI模式
$ a2dismod php

# 关闭prefork模式
$ a2dismod mpm_prefork

# 启动worker模式
$ a2enmod mpm_worker

# 重启apache2
$ sudo systemctl restart apache2

# 查看运行模式
$ a2query -M
worker

# 启动fcgid模块
$ a2enmod fcgid

结束

至此我们已经将Apache2的运行模式切换到了worker模式,本人也是初次尝试此配置方式,目前还不知道有无问题,但大量apache内存大的问题稍微有些解决。

Sollyu

保持饥渴的专注,追求最佳的品质

文章评论