LAMP(5)之配置httpd以FastCGI方式与php整合并使用xCache

LAMP(5)之配置httpd以FastCGI方式与php整合并使用xCache

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

微信扫描文章首部二维码或搜索 zze_coding 关注我的微信公众号发送 #php_package 即可获取 php-5.4.26.tar.bz2 源码包。

在前面我们已经编译 php 作为模块提供给 httpd,如果要使用 FPM/FastCGI 方式则需要重新编译安装 php,这里我就直接在前面【LAMP(4)之源码编译安装php5并使用xCache缓存器】的基础上做修改。

编译安装php

1、重命名之前安装的 php 目录和 xCache 配置文件以作备份:

$ mv /usr/local/php/ /usr/local/php-event
$ mv /etc/php.d/xcache.ini{,.event}

2、解压 php 压缩包并编译安装:

$ tar xf php-5.4.26.tar.bz2 
$ cd php-5.4.26
$ ./configure --prefix=/usr/local/php-fpm --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
$ make && make install

说明:

  • 相对之前模块方式编译安装,去除了 --with-apxs2=/usr/local/httpd24/bin/apxs,也不需要支持 worker 和 event 这两个 MPM,所以也去除了 --enable-maintainer-zts 选项;
  • 要启动 FPM 功能即使用 FastCGI 模式需要添加 --enable-fpm 选项;

3、给创建的 php 安装目录创建软链接:

$ ln -s /usr/local/php-fpm /usr/local/php

4、为 php 提供配置文件(也可直接使用之前的):

$ mkdir /etc/php.d 
$ cp php.ini-production /etc/php.ini

5、配置 php-fpm,为 php-fpm 提供 SysV init 脚本,并将其添加至服务列表:

$ cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
$ chmod +x /etc/rc.d/init.d/php-fpm
$ chkconfig --add php-fpm
$ chkconfig php-fpm on

6、为 php-fpm 提供配置文件:

$ cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 

7、编辑 php-fpm 的配置文件,配置 fpm 的相关选项为你所需要的值,并启用 pid 文件:

$ vim /usr/local/php/etc/php-fpm.conf
...
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pid = /usr/local/php/var/run/php-fpm.pid 
...

这里 pid 配置的目标文件路径是 php-fpm init 脚本默认使用的,如果修改则 php-fpm init 脚本也要随之修改。

8、接下来就可以启动 php-fpm 了:

$ service php-fpm start

9、默认情况下,fpm 监听在 127.0.0.1 的 9000 端口,也可以使用如下命令验证其是否已经监听在相应的套接字。

$ netstat -tnlp | grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      96573/php-fpm 

配置httpd

1、在 Apache httpd 2.4 以后已经专门有一个模块针对 FastCGI 的实现,此模块为 mod_proxy_fcgi.so 它其实是作为 mod_proxy.so 模块的扩充,因此,这两个模块都要加载,编辑 httpd 的配置文件来加载这两个模块:

$ vim /etc/httpd24/httpd.conf
...
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
...

2、配置虚拟主机支持使用 fcgi,在相应的虚拟主机中添加类似如下两行:

ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

例如:

$ vim /etc/httpd24/extra/httpd-vhosts.conf
...
<VirtualHost *:8081>
    DocumentRoot "/www/web1"
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/php_code/$1
    ErrorLog "/var/log/httpd24_web1_error_log"
    CustomLog "/var/log/httpd24_web1_access_log" common
    <Directory "/www/web1">
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>
...

说明:

  • ProxyRequests Off:关闭正向代理;
  • ProxyPassMatch:把以 .php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://127.0.0.1:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不需要手动指定。
    3、创建 /www/php_code 文件夹并在其下新建文件 index.php 文件内容如下:
$ mkdir /www/php_code
$ vim index.php
<?php
echo "from fpm";
phpinfo();
?>

4、编辑 httpd 的配置文件,让 httpd 能识别 php 格式的页面,并支持 php 格式的主页:

$ vim /etc/httpd24/httpd.conf
...
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps
...
DirectoryIndex  index.php  index.html
...

5、重启 httpd 服务,浏览器访问 8081 端口:

image.png

可以看到已经成功以 FastCGI 模式运行。

使用xCache缓存器

php 5.4 以上的版本需要 xCache 版本在 2.0 以上。
扫描文章首部二维码或搜索 zze_coding 关注我的微信公众号发送 #xcache 获取源码包。
要使用 xCache 也需要重新编译安装。
1、解压并编译安装:

$ tar xf xcache-3.1.0.tar.bz2 
$ cd xcache-3.1.0 
$ /usr/local/php/bin/phpize
$ ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
$ make && make install
...
Installing shared extensions:     /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20100525/

编译成功后最后输出的 Installing shared extensions 信息需要保留;

2、为 php 提供 xCache 的配置文件:

$ cp xcache.ini /etc/php.d/

3、编辑 xCache 的配置文件并配置:

$ vim /etc/php.d/xcache.ini
... 
extension = /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
...

/usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20100525/ 为 xCache 编译完成后输出的路径。

4、重启 httpd 服务,浏览器访问主机 8081 端口,在页面中查找到如下 xCache 相关组件信息即表示 xCache 扩展安装成功:

image.png

即在 FastCGI 模式下成功配置了 xCache。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/lamp5.html

Buy me a cup of coffee ☕.