PHP基于FastCGI模式与httpd通信

实验环境:

1.VMware虚拟机

2.linux子机3台

3.本地测试机

实验目的:

通过FastCGI模式让动态语言与静态分离开来,当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器,这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

实验拓扑:

前两篇博客写到httpd的编译和mysql的编译安装,这里就不在编译了。

编译php

./configure --prefix=/usr/local/php --with-mysql=mysqlnd 
--with-pdomysql=mysqlnd --with-mysqli=mysqlnd --with-openssl 
--enable-mbstring --with-freetype-dir --with-jpeg-dir --with-p
ng-dir --with-zlib --with-libxml-dir=/usr --enable-xml --en
able-sockets --enable-fpm --with-mcrypt=/usr/local/libmcrypt 
--with-config-file-path=/etc --with-config-file-sc
an-dir=/etc/php.d --with-bz2

上一次编译安装php的时候是基于作为httpd的模块编译的,其中

--withapxs2=/usr/local/httpd/bin/apxs 这一句就是把php编译成httpd的模块的,这次php是台独立的服务器,所以这里编译的时候--enable-fpm启用fpm。

编译安装php遇到的问题:

1.提示bzip2让重新安装

只要你确定bzip2装过了,还提示这个错误,那就是你的bzip2-devel这个包没有安装,用光盘安

2.编译时需要用mcrypt的时候,编译有时会提示libmcrypt这个包找不到,让重新安装

下载libmcrypt这个包,编译安装./configure –prefix=/usr/local/libmcrypt,如果还提示找不到

libmcrypt的时候,就在编译php的时候,里面的参数—with-mcrypt指定路径,--with-

mcrypt=/usr/local/libmcrypt

为php提供配置文件:

# cp php.ini-production /etc/php.ini

配置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

为php-fpm提供配置文件:

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

编辑php-fpm的配置文件:

# vim /usr/local/php/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
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

注意:这里面还有一个listen监听端口,端口默认是9000,但是前面的ip一定得是你php服务器的ip,千万不要是127.0.0.1,要不会出现以下错误

默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。这里要使用php服务器的ip:192.168.0.3

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

# service php-fpm start

配置httpd-2.4.9

启用httpd的相关模块

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

查看两个模块

#ls /usr/local/httpd/modules

启用此模块:找到,并把前面的“#”去掉即可

#vim /etc/httpd/httpd.conf

如果想让httpd以fcgi协议与php通信,还需要httpd以反向代理的方式工作,配置虚拟主机支持使用fcgi

在相应的虚拟主机中添加类似如下两行。

ProxyRequests Off

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

详解:

ProxyRequests Off:关闭正向代理

ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000(这里的ip地址指的是php所在服务器的ip)后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

例如:

编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

# vim /etc/httpd/httpd.conf

添加如下二行

AddType application/x-httpd-php  .php

AddType application/x-httpd-php-source  .phps

定位至DirectoryIndex index.html ,修改为:

DirectoryIndex  index.php  index.html

测试:

在测试时,如果出现file not found这个错误页面的时候,那百分之八十你是把原理理解错了,用户在向httpd发起请求页面的时候,httpd看到如果是php动态页面的就交给php去处理,php处理完之后会传给httpd,那么就要注意了,根据原理的理解,httpd解析不了的文件交给php服务器,这句话的意思是,httpd服务器上是不会有php文件的,它只是看到自己解析不了的,就把这个文件发给php服务器了。所以说,如果要测试的话,这个php文件是要放在php服务器上的,至于路径那是必须要跟httpd服务器上定义的DocumentRoot的路径一样。

时间: 2024-08-02 03:52:16

PHP基于FastCGI模式与httpd通信的相关文章

实现LNP基于fastcgi模式

实现LNP基于fastcgi模式 一,配置前端nginx,web服务器 1,修改nginx主配置文件,添加如下内容 server { listen 80; #监听端口 root /nginx/html/; #主网页路径 server_name www.a.com; #网站名 location / { fastcgi_pass 192.168.68.17:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/ht

生产环境LAMP搭建 - 基于 fastcgi

生产环境LAMP搭建 - 基于 fastcgi 由于在module模式,php只是已http的模块形式存在,无形中加重了http的服务负载,通常在企业架构中,使用fastcgi的模式,将所有的服务都设置为不同的独立服务,独立进程的形式存在,并部署在不同的设备上.是用的比较多的. php 进程 默认使用9000端口 默认 php-fpm 只监听127.0.0.1 的 9000 端口 配置php的连接方式,有静态和动态两种模式 pm = static|dynamic static:固定数量的子进程:

LAMP基于FastCGI分离部署应用

实验目标 本次LAMP搭建在CentOS 7虚拟机上,基于 php-fpm(Fastcgi)实现httpd.php-fpm.mariadb三者分离,并且在LAMP上部署应用,用两个虚拟机一个虚拟主机用于提供phpMyAdmin:另一个虚拟主机用于提供wordpress:且提供 xcache加速. 实验环境部署如下: httpd 172.18.12.7 httpd-2.4.6-40.el7.centos.x86_64 php-fpm 172.18.12.8 php-fpm-5.4.16-36.el

基于Java NIO的Socket通信

Java NIO模式的Socket通信,是一种同步非阻塞IO设计模式,它为Reactor模式实现提供了基础. 下面看看,Java实现的一个服务端和客户端通信的例子. NIO模式的基本原理描述如下: 服务端打开一个通道(ServerSocketChannel),并向通道中注册一个选择器(Selector),这个选择器是与一些感兴趣的操作的标识(SelectionKey,即通过这个标识可以定位到具体的操作,从而进行响应的处理)相关联的,然后基于选择器(Selector)轮询通道(ServerSock

部署环境:基于fastcgi的主机服务分离的LAMP

一.FastCgi与PHP-fpm 参考: http://www.mike.org.cn/articles/what-is-cgi-fastcgi-php-fpm-spawn-fcgi/ 二.LAMP分离架构 资源规划: 静态层:172.16.1.1,httpd服务器 动态层:172.16.1.2,PHP服务器,启动php-fpm 数据层:172.16.1.3, mysql服务器,lvm 三.数据库服务器搭建 略,参考上一篇:部署环境:LAMP+Xcache 四.httpd服务器的搭建 略,参考

apache中配置php支持模块模式、cgi模式和fastcgi模式

apache中配置php支持模块模式.cgi模式和fastcgi模式 首先安装apache.MySQL和PHP,依次顺序安装. 1.apache.mysql的安装比较简单,略过 2. php的安装,我安装的是php5.3.6内置了php-fpm,所以不需要再单独下补丁了. ./configure –prefix=/usr/local/php5 /--with-mysql=/usr/local/mysql /--enable-fpm--with-apxs2=/usr/local/apache/bi

Windows下IIS以FastCGI模式运行PHP

由于PHP5.3 的改进,原有的IIS 通过isapi 方式解析PHP脚本已经不被支持,PHP从5.3.0 以后的版本开始使用微软的 fastcgi 模式,这是一个更先进的方式,运行速度更快,更稳定.本文介绍在IIS上以FastCGI模式运行PHP.我们以 Windows 2003 + IIS 6.0(windows2003自带) 为例. 第一步:下载安装的文件 1. FastCGI 版本 fcgisetup_1.5_x86_rtw.msi2. MySQL 版本 mysql-5.5.19-win

LAMP服务器环境之编译(部分)安装-php的fastcgi模式

环境: redhat5.8(2.6.18-194.el5.i386,_) Apache-httpd 2.4.16 MysQl mysql-5.6.25二进制通用包 PHP php-5.6.11 pcre-8.35 xcache 3.2 安装顺序: apr-->apr-util-->httpd-->mysql-->php-->xcache 安装httpd服务和mysql在另一篇文章有详细介绍,此处不再累述.需要注意的是httpd服务2.4以上的版本需要pcre8.0以上的版本支

Linux高可用集群方案之配置heartbeat v2基于haresources配置文件的httpd高可用集群

本章主要配置heartbeat v2基于haresources配置文件的httpd高可用集群.  ll  本文导航    · 前期准备   · 安装heartbeat v2   · node1.node2主机安装httpd   · shared-nfs主机安装nfs   · 配置httpd高可用集群   · 客户端访问测试  ll  要求  完全掌握heartbeat v2基于haresources配置文件的httpd高可用服务.   前期准备  1.heartbeat服务主机规划 主机 接口