我一直以来都是以 ISAPI 模式运行 PHP 的,这种方式最大的缺点就是稳定性不好,当 PHP 出错的时候,Apache进程也死掉了。后来看到网上关于 PHP 以 FastCGI 模式运行的介绍,其中提到的种种好处(稳定、安全、高性能)让我决定尝试一下。
不过事情远不如预计的那么顺利。Google 了无数次也没找到一篇如何在 Windows 下用 Apache + FastCGI 跑 PHP 的资料,IIS + FastCGI 跑 PHP 的倒是不少。其中有一篇提到 Zend 公司也推荐以 FastCGI 模式运行 PHP(http://phplens.com/phpeverywhere/fastcgi-php)。
经过几个小时的摸索,终于成功实现了 Apache 1.3 + FastCGI 跑 PHP。
准备工作:
首先访问 http://www.fastcgi.com/dist/ 下载用于 Apache 的 mod_fastcgi。我使用的是 mod_fastcgi-2.4.2-AP13.dll。下载后将这个文件复制到 Apache 的 modules 目录中。
下载 PHP(我使用的 PHP-5.0.4),并解压缩,根据需要修改 php.ini 文件。注意不需要从 PHP 所在目录复制任何文件到 Windows 目录中。
修改配置:
然后修改 httpd.conf 文件,加入下面几行:
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3
# 说明:此处的 -processes 3 表示启动三个 php-cgi.exe 进程,
# 关于 FastCgiServer 的详细参数请参考 FastCGI 文档。
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# 说明:根据你的 PHP 文件所在位置修改上面两处黑体字。
修改完成后,重新启动 Apache 即可。
常见问题:
根据我的多次试验,最容易出现的几个问题主要都是由路径引起的。因此首先检查 php.ini 和 httpd.conf 文件中的所有路径是否正确。其次就是如果系统中以前安装过 PHP,那么要将 C:\Windows\php.ini 改名或删除。
其次还要检查 PHP 文件所在目录是否有足够的权限(我都是设置为 Everyone - 完全控制,反正开发用机不用考虑那么多安全限制)。
FastCGI 模式运行 PHP 的优点:
以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好(我本来用 ApacheBench 进行了测试,但忘了保存结果,大家有兴趣可以自己测试)。
最后,就是可以同时运行 PHP5 和 PHP4。参考下面的配置文件,分别建立了两个虚拟主机,其中一个使用 PHP5,另一个使用 PHP4。
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot d:/www
Options Indexes FollowSymlinks MultiViews
ServerName php5.localhost
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
<Directory "D:/www">
IndexOptions FancyIndexing FoldersFirst
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Listen 8080
NameVirtualHost *:8080
<VirtualHost *:8080>
DocumentRoot d:/www
Options Indexes FollowSymlinks MultiViews
ServerName php4.localhost
AddType application/x-httpd-fastphp4 .php
Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe"
<Directory "D:/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
使用上面的配置,访问 http://localhost/ 就使用 PHP5,而访问 http://localhost:8080/ 就使用 PHP4。所以只要合理配置,就可以让不同的虚拟主机使用不同版本的 PHP。
FastCGI 模式的一些缺点:
说完了好处,也来说说缺点。从我的实际使用来看,用 FastCGI 模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio 调试程序时,由于 FastCGI 会认为 PHP 进程超时,从而在页面返回 500 错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI 模式。
最后,在 Windows 中以 FastCGI 模式存在潜在的安全漏洞。因为我还没有找到如何在 Windows 环境下实现 SuEXEC 的方法,因此 PHP 的进程总是以最高权限运行,这从安全角度来看显然不是个好消息。
分享到:
相关推荐
9. **CGI和FastCGI**:Apache支持Common Gateway Interface (CGI)和FastCGI,使得动态内容如PHP、Perl、Python等可以通过Web服务器运行。 10. **SSL/TLS支持**:对于HTTPS支持,Apache 1.3.27需要安装mod_ssl模块,...
- **1.3 在Windows上安装Apache** - Windows用户可以下载专门的Windows版本进行安装。 - 安装过程中需要注意配置环境变量,确保Apache能够在系统中正常运行。 - **1.4 下载Apache源代码** - 对于需要定制化配置...
- **1.3**: 虽然较为老旧,但在一些特定场景下仍可能被使用。 - **2.0**: 引入了许多新特性,提升了性能和安全性。 - **2.2**: 目前最稳定且广泛使用的版本之一。 - **2.4**: 在2.2的基础上进一步优化了性能和增加了...
4.2 安装PHP 5.2.10(FastCGI模式) 4.3 安装Nginx 0.8.15 4.4 配置开机自动启动Nginx + PHP 4.5 优化Linux内核参数 4.6 在不停止Nginx服务的情况下平滑变更Nginx配置 4.7 编写每天定时切割Nginx日志的脚本 第...
尽管Apache以进程为基础,消耗更多资源,但其广泛的功能使其在许多场景下仍然适用。 1.1.1.4 Nginx服务器 Nginx是一个高性能的HTTP和反向代理服务器,擅长处理高并发连接。它利用epoll等高性能网络I/O模型,常作为...
- **PHP-FPM**:FastCGI进程管理器,用于提高PHP处理性能。 - **项目代码管理**:使用版本控制系统如Git来管理源代码。 #### 五、MySQL **5.1 MySQL基础+复杂语句** - **基础**:包括SQL语法、数据类型、表结构...
这是因为在很多编程和系统环境下,中文路径或包含空格的路径可能会引起兼容性问题或错误,导致软件无法正常运行。 4. `phpstudy官网链接.url` 是一个快捷方式文件,指向phpStudy的官方网站。用户可以通过这个链接...
**3.4 PHP FastCGI模式安装** FastCGI是一种提高程序执行效率的机制,尤其适用于PHP这样的脚本语言。通过FastCGI模式,PHP可以在多个进程间共享,从而减少启动时间,提高响应速度。 **3.5 启动测试** 完成所有...
- 配置FastCGI参数以优化PHP处理速度。 **3. 动静分离** - 将静态资源与动态内容分开处理,以减轻服务器负担。 #### 数据库优化 **1. MySQL优化** - 调整服务器参数以适应高并发环境。 - 设计合理的数据库表...
Nginx能够运行在多种操作系统上,包括UNIX、GNU/Linux、BSD、Mac OS X、Solaris以及Microsoft Windows。 随着Nginx在众多大型网站的成功部署,其稳定性和高效性得到了广泛的认可。Nginx以其小巧精致的特点著称,...
Apache还支持多种其他特性,如Gzip压缩以减少页面加载时间,FastCGI用于高效地处理动态内容,以及.htaccess文件允许用户在每个目录级别自定义服务器配置。 总的来说,"httpd-2.4.41.tar.gz"包含的Apache ...
对于使用FastCGI的Apache,RewriteRule需要修改为: ```apacheconf RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] ``` #### 1.2 启用mod_rewrite模块 确保Apache服务器已经加载了`mod_rewrite`模块。在`httpd....
1.7.2 Nginx+FastCGI运行原理 1.7.3 spawn-fcgi与PHP-FPM 1.7.4 PHP与PHP-FPM的安装及优化 1.7.5 配置Nginx来支持PHP 1.7.6 测试Nginx对PHP的解析功能 1.7.7 优化Nginx中FastCGI参数的实例 1.8 实战...
**1.3 FastCGI,简单的负载均衡和容错** Nginx可以作为FastCGI代理服务器,将请求分发到多个后端服务器进行处理。通过简单的配置,即可实现负载均衡和容错机制,确保服务的高可用性和响应速度。 **1.4 模块化的结构...
1,Mysql 切分,采用Innodb运行 52 2,动态Cache 服务器 -- 52 美国Facebok.com,中国Yeejee.com,日本mixi.jp均采用开源分布式缓存服务器Memcache 52 3,图片缓存和加 52 memcached+squid+apache deflate解决...