关于apache2.4 模块 mod_php mod_fastcgi mod_fcgi

简介:

故障:apache2.4 web服务器下,加载fastcgi 模块,始终无法加载

分析:1,查找文档过程中发现,apache 还有另外一个功能相近的模块,mod_fcgid,很多人说,fcgid要比fastcgi兼容性要好,因为mod_fastcgi是fastCGI.com的项目,遵循FastCGI授权条款。mod_fcgid是Apache基金会负责的项目,使用的是Apache-2.0授权条款。因此,不仅主要负责单位不同,其授权方式也不同

    2,mod_fastcgi的授权不是标准的自由/开放源码授权条款,所以显得与其他授权条款格格不入,再加上Linux  distribution套件管理政策的因素,使得mod_fastcgi难以全面进入所有Distribution官方库。网上会发现说mod_fastcgi几乎没有再继续开发了,因此也使得网路上许多人转而推荐mod_fcgid。其实这是最大的误解。官方说法是,FastCGI protocol 是一个轻量级且成熟的通讯协定,所以不太需要再额外加上新功能,而目前的工作主要在于瑕疵修复,也就几乎没有任何开发进展。

    3,虽然mod_fastcgi与mod_fcgid都支援FastCGI protocol,但设计的概念不同。mod_fcgid的理念是快速的结束FastCGI server并再快速的产生一个。这个方法与FastCGI protocol初衷不同,FastCGI protocol是希望能够允许long-running request。以PHP 应用为例,为了加速PHP 效能,通常会使用bytecode/opcode cache,例如APC、eAccelerator 或Xcache 等。但为了共享cache,意谓着process/request 必须在同一个shared cache中,而无法跨不同的FastCGI or FCGI process。因此在设计上,只能允许一个PHP process启动,然后由此spawn多个children process,使得children 能够享用parent的bytecode/opcode。

    4,mod_fcgid的官方描述是:

mod_fcgid is a high performance alternative to mod_cgi or mod_cgid, which starts a sufficient number instances of the CGI program to handle concurrent requests, and these programs remain running to handle further incoming requests. It is favored by the PHP developers, for example, as a preferred alternative to running mod_php in-process, delivering very similar performance.    5,所以用哪个模块都无所谓

处理过程

    1,根据配置正常在apache 配置文件里conf-enable里配置php5-fpm 但发现始终无法加载,

    2,分析过后,发现cgi方式和mod_php方式的不同在于,mod_php是将访问的PHP文件当作可执行文件来运行,所以它直接运行任何文件,也即可以有多个入口,而fastcgi则不同,它只地将请求发给一个入口php文件,由这个文件进行转发。所以怀疑,mod_php5 模块在apache2.4环境下与mod_fastcgi相互冲突,故a2dismod php5 关闭这个模块,fastcgi 便能正常加载了

504故障

                按照网上的很多文章搜一下就故障发生的原理了,是犹豫后端php处理时间过长,后端应用服务器还没返回给前段服务器,这是前段服务器已经超时,所以前段服务器已经把超时结果返回给了客户端,但实际上,后端还在正常无力php程序,,解决办法很简单,就是在php-fpm.conf 把

request_terminate_timeout = 10  时间设置的比前段服务器超时时间小就可以了,这样后端服务器如果处理不完,php-fpm 就会重新终止php-fastcgi 重新开启一个新的进程,同时并返回给前段,重新处理请求,这样便不会出现504错误,


关于两种加载fastcgi模块的方法

    1,第一种,不适用mod_fastcgi 模块, 继续使用mod_php5,但需要额外的模块就是mod_proxy代理,这样所有的php请求都已url 的形式请求过来,在通过一些正则规则,转发到后端的php-fpm server上,这样的话,有一定问题,就是开发如果把php文件类型隐藏掉,那么正则就会变得异常难写

    2,第二种,就是直接安装mod_fastcgi模块,并在conf-enable/php5-fpm.conf 加载到apache里,然后使之转发到后端的php-fpm服务器上,理由详见上文写的“处理过程


最后贴下配置

系统是Ubuntu14.04

apache2/conf-enable/php5-fpm.conf

1
2
3
4
5
6
7
8
<IfModule mod_fastcgi.c>
     AddHandler php5-fcgi .php
     Action php5-fcgi  /php5-fcgi
     Alias  /php5-fcgi  /usr/lib/cgi-bin/php5-fcgi
    # FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
     FastCgiExternalServer  /usr/lib/cgi-bin/php5-fcgi  -host 127.0.0.1:9000 -pass-header Authorization -idle-timeout 60  -flush
 
< /IfModule >

修改配置文件 并指向后端php5-fpm 服务器

同时启用a2enmod fastcgi模块 默认配置就好

最后从phpinfo里看到server API 是FPM/FASTCGI

这里的配置要说明一下:

    fascgi的超时时间要大于max_execution_time(php执行时间) 和request_terminate_timeout(cgi子进程处理请求时间),

如果三者超时时间关系搞错,服务器会报500错误

PS:最后吐槽一下apache web服务器,这配置文件简直乱的一逼,目录切来切去的,本来很简单的一个504错误引发出这么问题,苦战4天也算是有收获














本文转自wks9751CTO博客,原文链接:http://blog.51cto.com/wks97/1827579 ,如需转载请自行联系原作者



相关文章
|
6月前
|
PHP Apache
PHP环境搭建(配置php模块到apache服务器)
PHP环境搭建(配置php模块到apache服务器)
62 0
|
7月前
|
Apache PHP 数据安全/隐私保护
(MAC)PHP Apache 安装与配置
(MAC)PHP Apache 安装与配置
220 0
|
8月前
|
缓存 前端开发 JavaScript
PHP - Laravel 创建项目到服务器(nginx、apache)运行(附带目录结构)
PHP - Laravel 创建项目到服务器(nginx、apache)运行(附带目录结构)
211 0
|
24天前
|
运维 Linux Apache
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
197 2
|
28天前
|
存储 缓存 负载均衡
【Apache ShenYu源码】如何实现负载均衡模块设计
整个模块为ShenYu提供了什么功能。我们可以看下上文我们提到的工厂对象。/***/核心方法很清晰,我们传入Upsteam列表,通过这个模块的负载均衡算法,负载均衡地返回其中一个对象。这也就是这个模块提供的功能。
17 1
|
7月前
|
域名解析 Apache PHP
PHP Apache - 多站点虚拟主机配置
PHP Apache - 多站点虚拟主机配置
284 0
|
3月前
|
安全 网络安全 Apache
Windows下Apache部署多个php项目
在 Windows 系统下,使用 Apache 服务器发布多个 PHP 项目是一项常见的任务。本文将介绍如何在 Windows 操作系统下使用 Apache 发布多个 PHP 项目。在 Windows 操作系统下使用 Apache 发布多个 PHP 项目可能有一些挑战,但是只要您按照本文的步骤进行操作,您就可以成功地完成这项任务。希望本文能够对您有所帮助。
59 0
|
4月前
|
Apache PHP
百度搜索:蓝易云【Apache环境php安装扩展swoole。】
通过以上步骤,你就可以在Apache环境中成功安装和配置Swoole扩展了。请确保你按照正确的步骤进行操作,并根据你的系统和环境进行相应的调整。如果遇到问题,你可以参考Swoole官方文档或社区的支持资源来获取更多帮助。
32 1
|
6月前
|
Apache PHP
PHP环境搭建(搭建Apache服务器)
PHP环境搭建(搭建Apache服务器)
78 0
|
7月前
|
网络协议 Apache PHP
(MAC)PHP Apache
(MAC)PHP Apache
56 0

推荐镜像

更多