服务器环境搭建系列 II - PHP在IIS6.0中部署

场景


需要在客户服务器上进行 项目 部署实施:
  • 客户提供的服务器只有Windows平台;
  • 客户可提供的二级域名有限,或无法提供二级域名;
  • 服务器所在网络监管很严格,一般只开放80服务端口(如需开放其他端口则需要较长审批流程),无法通过VPN或FTP方式进行后期系统维护;
客户服务器环境为:
  • Windows 2003
  • IIS 6.0(.Net Frameworks 2.0+)
项目部署环境要求:
  • PHP 5.3.13
  • MySQL
  • 微博(记事狗)
  • 论坛(Discuz!)
解决方案

1.准备工作

    A. 通过Google搜索解决方案(得出参考文献如后面所列)。
  • 2种可选方案 - ISAPI和FastCGI;
  • 最终选择FastCGI - 由于文章中指出“ISAPI方式稳定性不佳,经常会导致整个Web Server Crash,所以微软特别针对IIS开发了FastCGI模组(IIS7已内建),据说效能及稳定性都有较大改善”。
    B. 在本地搭建模拟部署实施环境 - IIS上搭建项目部署所需环境准备工作如下:
  • 下载 PHP 包( 使用 php-5.3.13-Win32-VC9-x86.zip 线程安全版 ) - 最好安装于非系统盘,与项目系统处于同一文件夹且需是英文目录路径(暂时不考虑IO问题)。
  • 下载 FastCGI for IIS 包并安装 - 默认安装于 %windir%\system32\inetsrv 目录下,包含fcgiext.dll、fcgiext.ini、fcgiconfig.js等几个文件。
2.模拟环境搭建

    按照参考文章中所列,逐步修改相关配置。 开始确实摸不着头脑,实际上这几个 ini 配置文件中对于其中配置条目都有相关说明,比如php.ini中对默认使用什么值、建议在Windows平台上打开或关闭配置项等,fcgiext.ini 中非常详细地举例说明了多种php处理方式。

2.1 PHP.ini 相关配置变更

1. 首先开启『扩展目录』配置项

然后修改 PHP.ini 配置文件中如下3个配置项(IIS 的辅助配置):
cgi.force_redirect = 0 cgi.fix_pathinfo=1 fastcgi.impersonate = 1

2. 同时,需要开启MySQL相关配置(在如下图所示配置节)
具体应该只开启 MySQL 对应动态链接库配置项


3. 需开启下面设置项,以避免 Discuz! 出现 PHP 不能进行 script 解释的问题。

4. 部署时需打开 log 相关选项(如下图所示的 ini 配置节)
如下图需打开『显示启动时错误信息』选项,一般按照 PHP.ini 文件配置相应说明进行对应修改即可。

 进入实际生产环境时需关闭 log 并开启文件 log

5. PHP 按照上述配置后可以先放置 phpinfo.php 检查 PHP运行环境是否 OK,如果提示有自动区域设置(Locale)问题,可以通过修改下图所示配置项完成:
记得删除 phpinfo.php

2.2 fcgiext.ini 配置文件变更

修改 fcgiext.ini 配置文件 - 指定fcigext.dll需要处理的IIS站点及相关配置

一般需指定 fcgiext.dll 对应处理的 IIS 站点编号(如下图所示),避免客户服务器环境多系统间影响。

并在 [Types] 中进行设定,其中:
php:823433=PHP ;小写php为指定处理.php后缀的url请求,冒号后面数字标识对应IIS站点编号,等号右边的大写PHP表示对应的具体处理节[PHP]
[PHP]节中定义对应用于FAST CGI方式的PHP环境,这个方括号[PHP]内的PHP可以自定义,只需与[Types]中描述对应即可。

此外,须将下面两个时间设长些,因Discuz!中对 UCenter 的处理时间相当长(登录大概要10多秒钟):
RequestTimeout=50
ActivityTimeout=90

2.3 IIS 相关配置变更
这一步骤主要参考IIS6+PHP5 (FastCGI) 安裝攻略文章相关内容
假设PHP安装路径在 C:\PHP5,但从客户服务器环境及系统更新维护角度讲不建议这样做。

對 C:\PHP5 目錄增加 IIS_WPG 群組的讀取及執行權限。
(沒加這個就會跑出 FastCGI Error)

5. 加入系統環境變數 (讓 extension 及 php.ini 能順利被找到)。
Path=C:\PHP5;
PHPRC=C:\PHP5

6. 開啟 IIS 管理員,如下圖設定。

7. 增加預設首頁 index.php

8. 檢查網頁服務延伸。
(正常的話應該會有這一項,若沒有請自行加入 C:\WINDOWS\system32\inetsrv\fcgiext.dll)


主要需注意:
A. PHP.exe所在目录的可执行权限设定 - 需注意保障客户服务器安全,除非必要 不要开启 IIS_WPG 系统默认用户组除了 文件夹浏览、读取、执行权限外其他任何权限,特别不能为了简单直接开启系统的 Everyone 权限。
B. 尽量不使用fcgiext.js进行配置,而是直接修改fcgiext.ini配置文件 - 因为客户服务器有时会出于安全考虑关闭了本地cscript脚本的执行服务。


存在(遗留)问题

1. PHP 的文件 log 好像不能启动;

2. PHP 相关优化配置工作没有进行 - 数据库缓存设置、进程内存使用大小限制、上传文件限制等;

3. fcgiext 相关优化配置工作没有进行;

4. 未进行压力测试,需进一步对系统瓶颈进行考察 - 通过Google搜索或压力测试


建议

1. 最好将 Discuz! 和 微博(记事狗)分别放置于不同的应用程序池 - 如BBS和Weibo,以避免同一个w3wp.exe进程内执行的相互影响。
2. 最好将各站点除.php外地其他所有对应处理扩展都删除。
3. 将 IIS 相关优化整理出来。


参考

  1. IIS6+PHP5 (FastCGI) 安裝攻略 -  http://blog.linym.net/archives/264
  2. IIS6+PHP5(ISAPI)安装攻略 -  http://blog.linym.net/archives/240
  3. PHP 配置相关链接

工具




猜你喜欢

转载自mzllyl.iteye.com/blog/1555359