关于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

<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天也算是有收获

时间: 2024-10-19 00:03:31

关于apache2.4 模块 mod_php mod_fastcgi mod_fcgi的相关文章

CentOS安装Apache的FastCGI模块(mod_fastcgi)

网上有很多篇关于Apache的fastcgi模块安装说明的文章,大部分都是基于Apache源码编译的,如果是通过yum install方式安装httpd的话,直接依葫芦画瓢必然会遇到各种各样的编译问题,通过查阅老外写的一些关于CentOS下Apache的FastCGI模块(mod_fastcgi)的安装文档,我大致重新整理了一下. 1. 安装编译相关的依赖包 # yum install httpd-devel apr apr-devel libtool 2. 下载mod_fastcgi源代码 #

PHP 之 FastCGI 与 mod_php

网上对于FastCGI与mod_php的知识比较杂乱而不全面,故在此整理一下,以便入门学习者查阅方便. 背景PHP最常用的方式是以模块的方式(mod_php)运行在Apache中,也是Apache运行PHP的默认方式:但在Nginx中,Nginx又使用的是PHP-FPM,但是PHP-FPM到底是个什么东东?跟php有什么关系?今天我们一起来探究一番. 网上对于FastCGI与mod_php的知识比较杂乱而不全面,故在此整理一下,以便入门学习者查阅方便. 背景 PHP最常用的方式是以模块的方式(m

Apache与tomcat整合配置

1.解压Apache tar zxvf httpd-2.4.18.tar.gz 把apr和apr-util包解压到Apache里的srclib目录里面 tar zxvf apr-1.4.6.tar.gz -C /home/software/httpd-2.4.18/srclib/ tar zxvf apr-util-1.5.2.tar.gz -C /home/software/httpd-2.4.18/srclib/ cd  /home/software/httpd-2.4.18/srclib/

编译安装Apache+PHP

1.解压Apache tar zxvf httpd-2.4.18.tar.gz 把apr和apr-util包解压到Apache里的srclib目录里面 tar zxvf apr-1.4.6.tar.gz -C /home/software/httpd-2.4.18/srclib/ tar zxvf apr-util-1.5.2.tar.gz -C /home/software/httpd-2.4.18/srclib/ cd  /home/software/httpd-2.4.18/srclib/

CentOS 6上编译安装AMP详解

在CentOS 6上编译安装AMP     A:Apache(httpd)     M:MySQL or MariaDB     P:php 目录: 一.准备工作 二.编译安装Apache(httpd) 三.编译安装MariaDB 四.编译安装PHP 编译安装AMP的优点: 根据生产环境灵活定制程序 优化编译参数,提高性能 解决不必要的软件依赖 一.准备工作 1.需要的软件包及版本号: httpd-2.4.27(apr-1.5.2+ apr-util-1.5.4) + MariaDB-5.5.5

Apache+Django++mod_wsgi(ubuntu下虚拟机方式部署过程)

前几天以源码的方式部署了Apache+mod_wsgi+django的项目,见我的另一个篇博客 这几天也用apt-get方式安装Apache的方式,安装了部署了一次,其中有一致的地方,也有差别的地方,再此记录一下 环境ubuntu 16.04 +apache2.4.25 +django1.8+mod_wsgi-4.5.15+python2.7 Apache.Python2.7都是以apt-get install的方式安装的 django1.8 是pip install django==1.8的方

入门篇:Ubuntu用apache做web服务器

一.安装Apache Ubuntu提供了3个apache2的软件包,它们分别是apache2-mpm-worker.apache2-mpm-prefork.apache2-mpm-event.如果你在安装Ubuntu操作系统<入门篇:ubuntu server 安装教程>的时候你选择安装了LAMP包的话,那么安装的是apache2-mpm-prefork.如果你没有选择安装LAMP包,安装完系统之后,执行下面的命令安装apache2这个软件包时,安装的是apache2-mpm-worker:s

安全漏洞整改解决方案

注意:以下所有操作須结合实际情况,确认后再实施.1. OpenSSH 相关漏洞  解决方案 升级OpenSSH为最新版本,目前为5.9,首先到官网(http://www.openssh.com/portable.html#http)下载:openssh-5.9p1.tar.gz 把OpenSSH 上传到服务器,首先检查升级前版本(以下所有操作均在root下完成): shell> ssh -V # 此命令会显示OpenSSL.OpenSSH的詳細版本号 首先安装OpenSSH: shell> t

全面解读Python Web开发框架Django

全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yoursef). 花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又 重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTM