apache需加载第三方模块(如mod_fcgid)启用fastcgi,推荐mod_fcgid因其稳定、维护活跃、兼容apache 2.4+且自带进程管理;配置三步:启用模块、设置handler与execcgi权限、调优fcgidmaxprocesses等参数。

确认并启用 mod_fcgid 模块
Ubuntu/Debian 系统直接安装即可自动启用:
sudo apt install libapache2-mod-fcgid
安装后模块已写入 mods-enabled/fcgid.load,无需手动 LoadModule。
CentOS/RHEL 或源码编译 Apache 的情况:
– 下载 mod_fcgid 源码(注意匹配 Apache 版本);
– 编译时指定 top_dir 指向你的 Apache 安装路径;
– 确保 httpd.conf 中有这一行(路径按实际调整):
LoadModule fcgid_module modules/mod_fcgid.so
声明 FastCGI 处理器与脚本权限
在站点配置(如 sites-enabled/000-default 或 httpd.conf 的 <directory></directory> 块内)添加:
-
启用执行权限:加上
Options +ExecCGI,否则 Apache 拒绝运行 .fcgi 文件 -
绑定处理器:用
SetHandler fcgid-script告诉 Apache 把匹配文件交给 fcgid 模块处理 -
限制可执行后缀(可选但推荐):
AddHandler fcgid-script .php .fcgi,避免误执行任意文件
示例片段:
Options +ExecCGI
AddHandler fcgid-script .php .fcgi
SetHandler fcgid-script
调优 FastCGI 进程行为
在 <ifmodule mod_fcgid.c></ifmodule> 块中设置,直接影响并发与内存占用:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- FcgidMaxProcesses:全局最大并发进程数(如设为 50),防爆内存
- FcgidMaxRequestsPerProcess:单个进程处理多少请求后自动重启(如 1000),缓解 PHP 内存泄漏
- FcgidIOTimeout:读写超时(秒),避免慢脚本拖垮整个池(建议 40–60)
- FcgidIdleTimeout:空闲进程存活时间(如 60 秒),及时回收不用资源
这些值要结合服务器内存和 PHP 脚本平均内存占用来估算,不是越大越好。
PHP 脚本需适配 FastCGI 运行方式
FastCGI 下 PHP 不再是每次请求启动新进程,而是常驻——所以不能依赖 CGI 时代的 $_SERVER['SCRIPT_FILENAME'] 直接执行,而应由 Web 服务器转发请求。
典型做法是:
– 把 php-cgi(非 php)二进制放在可执行目录(如 /usr/lib/cgi-bin/);
– 在 Apache 配置中用 Action 或 ScriptAlias 映射 .php 到它;
– 或更常见的是:用 ProxyPassMatch 转发给 php-fpm(此时已不属于 Apache FastCGI 模块范畴,而是反向代理模式)。
若坚持纯 Apache + mod_fcgid + PHP,确保 PHP 编译时启用了 --enable-fastcgi(旧版)或使用带 FCGI 支持的 SAPI(新版多用 php-fpm 替代)。










