作者: Ruslan Yakushev
IIS Team发布于2007年12月05日
IIS Team发布于2008年04月02日
简介
2006年10月30日,Microsoft和Zend发布了一项联合开发的技术的预览版,该技术的目标是对在IIS上运行PHP应用程序提供良好的、可靠的、高性能的运行支持。现在,IIS 团队发布了发布版(Go Live Release)的基于IIS 6.0的FastCGI的扩展,它解决了社区报告的在上一个版本中的问题。
这篇文章解释了如何使用Microsoft IIS FastCGI扩展,在Windows XP和Windows Server® 2003操作系统上设置并运行PHP应用程序。
什么是FastCGI?
FastCGI是一个标准协议,它允许应用程序架构的CGI可执行(executable,翻译出处 -- -- 微软术语门户网站)与web服务器交互。他与标准的CGI协议不同,FastCGI重用了对多个请求的CGI进程,它与CGI相比提供了更为强大的性能增强。IIS FastCGI支持使IIS能够用FastCGI托管普通CGI项目,比如:PHP或Ruby On Rails,并且为这类应用程序框架产品的部署提供了高性能和可靠性支持。
使用IIS FastCGI支持涉及一下方面:
- IIS web 服务器 (FastCGI扩展发布版(Go Live Release)支持IIS 6.0)
- IIS FastCGI扩展
- The CGI项目(例如:php-cgi.exe)
Web服务器把对你的应用程序的HTTP请求派遣给FastCGI组件,它依次地启动CGI项目可执行,并进行转发以进行处理。请求一旦处理完毕、响应已被发回给服务器并发送给客户端,CGI进程将被重用于随后的请求处理。这有助于提高性,避免为每一个请求开始很多的新进程,这对性能的提升和建立一个稳定的生产环境都很有好处。
更多关于FastCGI协议的信息,参考http://www.fastcgi.com/devkit/doc/fcgi-spec.html.
为 IIS 6.0安装FastCGI扩展
基于32位和64位Windows XP以及Windows Server 2003的FastCGI扩展可以在这里下载: https://www.iis.net/downloads/default.aspx?tabid=34\&g=6\&i=1521
当你运行FastCGI安装程序时,它会复制FastCGI的定义文件(specific)到 "%WINDIR%\system32\inetsrv"文件夹,注册并启用FastCGI Web服务器扩展。除了安装程序会进行复制外,还要注意:
- fcgiext.dll - 这事实上是FastCGI处理器(handler),它负责与FastCGI启用的处理请求的进程进行通信。
- fcgiext.ini - 这个是配置文件,它包含了对FastCGI进程的文件映射。它还包括了FastCGI进程池的配置信息。
- fcgiconfig.js - 这个配置了FastCGI扩展。该脚本更新了fcgiext.ini文件,修改了IIS metabase,回收利用了web服务应用程序池(如果需要的话)。
下载与安装PHP
FastCGI扩展可以在Windows上兼容运当前官方发布的PHP 4.4.x和PHP 5.x,下载地址www.php.net/downloads。由于FastCGI扩展以一个单一的线程行为(threaded manner)托管并执行php进程,建议您下载并安装基于Windows的非线程安全的PHP构建(build)。非线程安全的PHP构建提供了一个缺乏线程安全的性能提升,但在一个单一并同时存在(single concurrency)的环境下还是可以接受的,比如:FastCGI。
您也可以用FastCGI扩展和已经存在的PHP 4.4.x或PHP 5.x一起使用。
注意:从PHP 5.2.1开始,PHP分发包含了Zend开发对性能方面的增强,用来增强PHP引擎在Windows上的性能。这些最新版本在IIS/FastCGI平台上提供了最优的PHP性能。
Windows技术预览版的Zend Core提供了对商业PHP产品的预览,它们包括在Windows上对PHP性能的增强,以及其他增强和Zend Core产品的特性。
配置FastCGI扩展,使其和PHP一起工作
PHP一安装的Windows上,您有两个选择,来配置FastCGI:使用安装FastCGI扩展时提供的配置脚本,或者自己手动修改IIS配置设置(IIS configuration settings)以及fcgiext.ini文件,从而完成所有的配置任务。根据选择的不同,会涉及到下面的部分。
通过使用脚本来配置FastCGI扩展,使其和PHP一起工作
fcgconfig.js配置脚本的位置在%WINDIR%\system32\inetsrv,它是随着FastCGI扩展安装而提供的。要配置FastCGI扩展,使其和PHP一起工作,请按照如下步骤进行:
打开命令行窗口,改变当前的路径为%WINDIR%\system32\inetsrv,并运行配置脚本 把PHP CGI项目注册为将会被处理的扩展名为.php的程序:
cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"C:\PHP\php-cgi.exe"
(替换C:\PHP\php-cgi.exe为指向php-cgi.exe文件的路径。如果您安装到的目录不是C:\PHP)
注意: 如果你不想在你的整个服务器上,注册被FastCGI模块处理的PHP扩展,只是想要把它注册到特定的网站,那就添加 "-site:[siteId]" 参数,例如:
cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"C:\PHP\php-cgi.exe" –site:1
注意: 要查看FastCGI扩展支持的配置参数列表,参考FastCGI扩展文档。
通过手动配置使FastCGI扩展和PHP一起工作
要手动配置IIS与FastCGI扩展,你必须为IISMetabase上的php扩展创建脚本映射,并修改fcgiext.ini文件位置为%WINDIR%\system32\inetsrv。
创建脚本映射
1. 运行inetmgr.exe.
2. 双击指向本地电脑的机器图标
3. 右键单击"Web Sites"选择"Properties."
4. 点击"Home Directory"选项卡
5. 点击"Configuration..."按钮
6. 点击"Add..."按钮
7. 浏览地址%WINDIR%\system32\inetsrv找到fcgiext.dll文件
注意: 如果你需要在64位机器上使用32位模式的话,那么请浏览%WINDIR%\SysWOW64\inetsrv。
8. 输入.php作为扩展名。
9. 输入动词(Verbs),例如:GET,HEAD,POST
10. 确定"Script Engine"和"Verify that file exists"已被选中
11. 点击OK
修改fcigext.ini文件
添加了脚本映射后,修改fcgiext.ini文件:
1. 添加一个扩展到应用程序映射(php=PHP)的[Types]节点
2. 在[PHP]节点添加ExePath=c:\php\php-cgi.exe (假设您把PHP文件安装到了C:\PHP文件夹).
[Types]
…
php=PHP
…
[PHP]
ExePath=c:\php\php-cgi.exe
对fcgiext.ini文件做完所有的修改后,保存它,重启托管您的PHP应用程序的网站的相关应用程序池。
配置在IIS上的默认文档
大多数PHP应用程序使用index.php作为默认应用程序文档。配置IIS来处理这个文件(作为默认的内容页):
1. 运行inetmgr.exe
2. 双击指向本地电脑的机器图标
3. 右键单击"Web Sites"选择"Properties."
4. 点击"Documents"选项卡
5. 点击"Add..."按钮,在"Default Document Name:"中输入"index.php"
6. 点击"OK."
设置FastCGI配置来最优化PHP的功能,安装和性能
支持PHP全部的功能,在FastCGI扩展上运行高性能的PHP应用程序,是IISTeam的主要目标和关注点。在我们内部测试与Zend科技合作中,我们支持一套FastCGI扩展与PHP的配置设置,当在Windows上通过FastCGI扩展运行的时候,为PHP应用程序提供了最优化的功能和性能。
配置你的服务器,如下:
1. 修改php.ini文件,如下:
- 设置fastcgi.impersonate = 1。在IIS下,FastCGI支持调用客户端的仿冒安全凭证。它允许IIS来定义请求运行的安全环境。
- 设置cgi.fix_pathinfo=1。cgi.fix_pathinfo 提供了*real* PATH_INFO/PATH_TRANSLATED 对CGI进行支持. PHP之前的做法是设置PATH_TRANSLATED为SCRIPT_FILENAME,并且不关心PATH_INFO是什么。PATH_INFO的更多信息,请查看cgi说明书(specification)。设置这个值为1将会引起PHP CGI修复其路径以适应说明书中的定义。
- 设置cgi.force_redirect = 0.
2. 通过运行fcgiconfig.js脚本,在PHP节点设置FastCGI配置设置,如下:
- 设置FastCGI进程池属性InstanceMaxRequests为10000。这个设置定义了FastCGI扩展将会回收利用(recycle)php-cgi.exe,在成功处理完10000请求之后。
> cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000
3. 配置FastCGI扩展,设置PHP处理的PHP_FCGI_MAX_REQUESTS环境变量为10000。这个设置指定 php-cgi.exe,在在成功处理完10000请求之后,回收利用自身。
> cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
注意: 你能配置InstanceMaxRequests和PHP_FCGI_MAX_REQUESTS来使用除了10000以外的数字。一个通用的准则,总是确保InstanceMaxRequests 的值小于等于PHP_FCGI_MAX_REQUESTS的值。
测试PHP CGI
安装完FastCGI扩展后,并且注册并配置PHP CGI,你可以请求你的PHP应用程序和正常的使用它了。
要测试,创建和请求一个包含下面内容的你网站中的phpinfo.php页:
<?php
phpinfo();
?>
你会看到类似的画面:
注意Server API指的是PHP被以FastCGI模式托管。
为Ase安装包含FastCGI扩展的phpBB应用程序
phpBB是一个流行的开源论坛解决方案。它提供一个大而可自定制的一套特性,包括:强大的权限系统(permissions systems),私有消息(private messaging), 搜索功能, 一个自定制的模板以及语言系统并支持多数据库。更多关于phpBB的消息,参看http://www.phpbb.com。phpBB社区说明信息,参见http://www.phpbb.com/community/。
这一节会介绍在IIS6.0上安装带FastCGI扩展的phpBB所需要的步骤。
下面的步骤假设你已经完成了前面介绍的配置FastCGI扩展和PHP类库的工作。
下载与解压应用程序
首先,下载最新的稳定版本的phpBB。对于本文,我们使用phpBB 2.0.22,您可以从这里下载。当您下载了压缩包后,把它解压缩并拷贝到C:\Inetpub\wwwroot\phpBB2。
设置数据库
要使用phpBB,您必须有数据库的访问权限。这里,我们使用MS SQL server 2005。您页可以使用MS SQL Server Express,MS Access,MySQL或其他产品。
在开始安装前,在数据库服务器上创建一个数据库。再创建一个数据库用户,并赋予对创建的数据库具有db ownership权限。如果您使用的是MS SQL Server 2005,那么打开 Microsoft SQL Server Management Studio点击"New Query"按钮。在查询窗口中,输入下面的脚本(这个脚本为phpBB应用程序创建了必要的数据库和用户)。
USE [master]
GO
CREATE DATABASE phpbb2
GO
CREATE LOGIN [phpbb2]
WITH PASSWORD=N'phpbb2',
DEFAULT_DATABASE=[phpbb2],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF
GO
USE [phpbb2]
GO
CREATE USER [phpbb2] FOR LOGIN [phpbb2] WITH DEFAULT_SCHEMA=[dbo]
设置与配置应用程序
打开您的浏览器浏览https://localhost/phpBB2/index.php. 这会把你带到phpBB的设置页面。输入安装需要的信息(参看下图)(替换为您的数据库名称)。点击"Start Install"。
下一个页面,phpBB会要求您选择一个更新config.php的方法。选择"Just send the file and I'll FTP it manually"。保存文件到C:\Inetpub\wwwroot\phpBB2文件夹。
注意: 修改对您刚才保存的config.php的访问权限。如果您的网站要配置为匿名用户访问,那您必须将该权限赋予"Internet Guest Account"。
设置完权限,浏览https://localhost/phpBB2并作为管理员身份登陆。
测试phpBB应用程序
要测试phpBB是不是成功安装了,创建一个论坛并在上面发布一些信息。照着下面步骤进行:
1. 浏览https://localhost/phpBB2 点击"Log In."
2. 输入管理员的用户名密码(这里使用admin/admin).
3. 登陆后,找到页面底部的连接"Go to Administration Portal "。点击它,转到管理门户。
phpBB会询问再次询问您的权限。然后,它会显示出管理界面:
4. 在此界面中点击Forum Admin组下的Management。输入论坛您想要创建的论坛的名称,然后点击Create New Forum。
这样一个可供发布信息的新论坛就建立好了。
获得更多信息
要讨论IIS6.0的FastCGI扩展,或文件bug回报,请使用下面的论坛:
- IIS.NET FastCGI forums
查看已知的关于IIS6.0FastCGI的问题,参看已知问题。
要获得更多关于在IIS上运行多种版本PHP应用程序的信息,参看:
- PHP on IIS portal
- PHP community forum
相关内容
文章
- 为PHP设置FastCGI
- 在带FastCGI的Windows Vista上安装PHP
- 安装支持Server Core的FastCGI
- PHP 问题