Rootop 服务器运维与web架构

linux+apache+php的fastcgi模式

| 暂无评论

FastCGI 的主要优点是把动态语言和web server分离开来,所以web server与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端web server服务器的压力,使web server专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求。
为了测试,暂不安装mysql并且这里以apache为例,编译参数较少。
安装编译环境:
yum -y install gcc gcc-c++  make automake autoconf kernel-devel ncurses-devel libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel  pcre-devel libtool-libs freetype-devel gd zlib-devel file bison patch mlocate flex diffutils   readline-devel glibc-devel glib2-devel bzip2-devel gettext-devel libcap-devel libmcrypt-devel   //直接复制的以前编译参数

下载httpd php php-fpm:
http://archive.apache.org/dist/httpd/httpd-2.2.22.tar.gz
http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
http://museum.php.net/php5/php-5.2.17.tar.gz
http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz

编译apache:

[root@localhost httpd-2.2.22]#./configure --prefix=/usr/local/apache --enable-so   //这里采用最小的编译参数

为apache安装mod_fastcgi模块:

在mod_fastcgi安装包中有一个INSTALL.AP2文件,里面有安装方法:

    $ cd <mod_fastcgi_dir>
    $ cp Makefile.AP2 Makefile     //拷贝编译文件
    $ make
    $ make install

If your Apache2 installation isn’t in /usr/local/apache2, then
    set the top_dir variable when running make (or edit the
    Makefile),
e.g.

      $ make top_dir=/opt/httpd/2.0.40

    Add an entry to httpd.conf like this:

      LoadModule fastcgi_module modules/mod_fastcgi.so

这里需要编辑Makefile,修改top_dir      = /usr/local/apache   //改为你apache的编译路径

make && make install 即可
编译完成后在apache配置文件中添加一行:
LoadModule fastcgi_module modules/mod_fastcgi.so    //载入模块 
至此完成。

打php的fpm补丁:
[root@localhost smb]#gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1

编译php:

[root@localhost php-5.2.17]# ./configure --prefix=/usr/local/php --enable-fastcgi --enable-fpm --with-config-file-path=/etc

拷贝php的配置文件:
[root@localhost php-5.2.17]# cp php.ini-recommended /etc/php.ini

编辑php-fpm的配置文件:
[root@localhost ~]# vi /usr/local/php/etc/php-fpm.conf
去掉下面的注释(<!– –>):
                        Unix user of processes
                        <value name=”user”>nobody</value>

                        Unix group of processes
                        <value name=”group”>nobody</value>
指定php-fpm运行时的用户和组。不修改会无法启动。

启动php-fpm:
[root@localhost ~]# /usr/local/php/sbin/php-fpm start
Starting php_fpm  done

查看:
[root@localhost ~]# lsof -i:9000        //php-fpm占用9000端口
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
php-cgi 49783   root    6u  IPv4 132841      0t0  TCP localhost:cslistener (LISTEN)
php-cgi 49786 nobody    0u  IPv4 132841      0t0  TCP localhost:cslistener (LISTEN)
php-cgi 49787 nobody    0u  IPv4 132841      0t0  TCP localhost:cslistener (LISTEN)
php-cgi 49788 nobody    0u  IPv4 132841      0t0  TCP localhost:cslistener (LISTEN)
php-cgi 49789 nobody    0u  IPv4 132841      0t0  TCP localhost:cslistener (LISTEN)
php-cgi 49790 nobody    0u  IPv4 132841      0t0  TCP localhost:cslistener (LISTEN)

整合apache+php/php-fpm

创建fastcgi脚本目录:
mkdir /usr/local/apache/htdocs/fcgi-bin
ln -s /usr/local/php/bin/php-cgi  /usr/local/apache/htdocs/fcgi-bin/php-cgi

编辑httpd.conf,添加(注意实际apache路径):

<IfModule fastcgi_module>
ScriptAlias /fcgi-bin/ “/usr/local/apache/htdocs/fcgi-bin/”
FastCgiExternalServer /usr/local/apache/htdocs/fcgi-bin/php-cgi -host 127.0.0.1:9000
AddType application/x-httpd-php .php
AddHandler php-fastcgi .php
Action php-fastcgi /fcgi-bin/php-cgi
<Directory “/usr/local/apache/htdocs/fcgi-bin/”>
SetHandler fastcgi-script
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</IfModule>

启动apache。添加phpinfo测试页。测试。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/1870.html

作者:Venus

服务器运维与性能优化

发表回复