如何在Windows实例中通过IIS搭建PHP环境

Windows Server实例上部署PHP应用时,为保障网站性能与安全,可利用IISFastCGI模块集成PHP(NTS版本),并为网站配置独立的应用程序池与目录权限。

方案架构

通过IISFastCGI模块与PHP解释器集成,实现对PHP网页的解析和服务。外部请求由云服务器ECS的安全组过滤后,由IIS处理程序映射,将.php请求转发给FastCGI进程池中的php-cgi.exe处理,最终将执行结果返回给客户端。

image

核心组件说明

  1. 用户的浏览器通过公网向ECS实例80端口发起HTTP请求。

  2. IIS接收到HTTP请求。如果请求的是.php文件,IIS的处理程序映射规则会通过FastCGI协议将其转发给PHPCGI执行程序(php-cgi.exe)。

  3. FastCGI模块管理一个php-cgi.exe进程池,接收请求并执行相应的PHP脚本。

  4. PHP解释器执行业务逻辑,并将生成的HTML内容或其他数据返回给IIS。

  5. IIS将最终的执行结果作为HTTP响应返回给客户端。

实施步骤

以下步骤以Windows Server 2022为例。

步骤一:安装IISCGI模块

  1. 登录ECS实例。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。选择连接方式为终端连接,输入账号和密码,登录图形化终端页面。

  2. 在任务栏的搜索框中输入服务器管理器并打开。

  3. 选择添加角色和功能,在向导中单击下一步直至进入服务器角色页面,勾选Web 服务器 (IIS)

  4. 在弹出的对话框中,单击添加功能。然后单击下一步直至进入角色服务页面。

  5. 角色服务列表中,展开Web 服务器 > 应用程序开发,勾选CGI。单击下一步,然后单击安装

  6. 等待安装完成后,单击关闭

步骤二:安装PHP运行环境

  1. 下载并安装PHP需要的Microsoft Visual C++ Redistributable运行库

  2. 访问PHP官网的下载页面。选择VS17 x64 Non Thread Safe版本的Zip压缩包进行下载。

    IISFastCGI采用多进程模型,每个进程独立运行,不存在多线程共享资源的情况。NTS版本去除了线程安全检查,在IIS环境下性能更高且更稳定。
  3. 将下载的压缩包解压到路径简单且无空格的目录,例如C:\php。此路径将作为PHP的安装根目录。

步骤三:配置PHPIIS集成

通过FastCGI协议调用PHP解释器,使IIS能够识别.php文件请求,并将这些请求交由PHP解释器处理。

  1. 在任务栏的搜索框中输入Internet Information Services并打开。

  2. 在左侧连接窗格中,单击服务器主机名,进入服务器功能视图。

  3. 双击打开处理程序映射,在右侧操作窗格中,单击添加模块映射

  4. 在弹出的对话框中,配置以下参数:

    • 请求路径*.php

    • 模块FastCgiModule

    • 可执行文件C:\php\php-cgi.exe

      在文件选择对话框中,将文件类型从.dll切换为.exe以找到php-cgi.exe
    • 名称PHP via FastCGI

  5. 单击确定。在弹出的确认对话框中,单击,创建对应的FastCGI应用程序。

步骤四:创建并配置网站

创建一个新的网站,并为其配置独立的应用程序池和目录权限。

  1. 创建目录并配置权限

    为遵循最小权限原则,IIS不会自动为新目录授予权限。需要手动为IIS_IUSRS组授予读取权限,否则访问网站时将返回403500错误。
    1. 在任务栏的搜索框中输入文件资源管理器并打开。

    2. 创建网站根目录,例如 C:\myphp

    3. 右键单击网站根目录,选择属性 > 安全 > 编辑 > 添加

    4. 输入对象名称来选择框中,输入IIS_IUSRS,单击检查名称确定

    5. 选中新添加的IIS_IUSRS组,为其授予读取和执行列出文件夹内容读取权限。

    6. 单击确定保存权限设置。

  2. 修改IIS示例网站端口

    新建的网站需要使用80端口,而IIS示例网站(Default Web Site)已占用该端口。
    1. 在任务栏的搜索框中输入Internet Information Services并打开。

    2. 在左侧连接窗格中,展开服务器主机名,单击网站

    3. 选中Default Web Site,在右侧操作窗格中,单击绑定

    4. 选中目标端口记录单击编辑,修改为其他端口(如8080),单击确定,单击关闭

  3. 添加网站

    1. 在左侧连接窗格中,右键单击网站节点,选择添加网站

    2. 配置网站信息:

      • 网站名称:例如MyPHP

      • 物理路径:指向网站文件的根目录,例如 C:\myphp

      • 端口80

    3. 单击确定

步骤五:配置安全组并验证

通过创建测试网页,验证环境是否配置成功。

  1. 配置安全组规则

    为使网站能被公网访问,需在实例的安全组中放行Web服务端口。

    1. 前往ECS控制台-实例单击目标实例ID,进入实例详情页。

    2. 在实例详情页,单击安全组页签,然后单击目标安全组ID进入其详情页。

    3. 在入方向规则列表中,单击添加规则,配置以下参数后保存。

      • 授权策略允许

      • 协议自定义 TCP

      • 访问来源0.0.0.0/0

      • 访问目的(本实例)80/80

  2. 创建测试页面

    在网站的根目录下(例如 C:\myphp),创建一个名为index.php的文件,并填入以下内容:

    <?php
        phpinfo();
    ?>
  3. 访问测试页面

    打开浏览器,访问http://<实例公网IP地址>/index.php,如果页面成功显示PHP的详细信息,则表示环境已成功搭建。