Code前端首页关于Code前端联系我们

Windows使用IIS7部署PHP项目和安全配置

terry 2年前 (2023-09-28) 阅读数 57 #未命名

选择操作平台需要多方面的考虑。我不想参与任何关于Linux和Windows的争论。我只是希望自己能更理性地看待这个问题,而不是无缘无故地否定某一方。 。现在是9102年。不要停留在10多年前的Windows Server 2003 + IIS 6时代。不管你出于什么考虑而拒绝Windows Server+IIS,性能确实不能作为理由。

从 IIS 7 开始,使用 IOCP 模型和在内核模式下运行的 http.sys 极大地提高了 IIS 性能。在相同的默认配置下,干净的静态文件的输出性能甚至比Nginx还要高。虽然Web服务器的性能足够了,但是Windows Server的网络层性能实际上比Linux差。鉴于Linux内核可以进一步调优,重负载下的性能仍然存在显着差异。如果应用程序的瓶颈不在网络层,则可以忽略此漏洞。

在功能上,通过IIS集成Web平台安装程序安装URL重写和应用程序请求路由组件后,还可以实现URL重写、反向代理、负载均衡、缓存服务等功能。

平台差异分析

PHP部署方式分为三种:

  • Nginx + PHP-FPM
  • Apache + mod_php / mod_proxy_fcgi❓ +fcgi + PHP‶CII PHP - FP M 和 IIS + PHP FastCGI 可以认为是 Web Server + FastCGI 模式。不同的是Nginx和FastCGI之间多了一个PHP-FPM(FastCGI进程管理器)。 Apache 还可以将 mod_proxy_fcgi 与 PHP FastCGI 结合使用,或将 mod_proxy_fcgi 与 PHP-FPM 结合使用(Apache httpd 2.4.x 上的高性能 PHP 使用 mod_proxy_fcgi 和 php-fpm)。

    线程安全还有一个区别,即NTS(Not Thread Safe)和TS(Thread Safe)。您可以查看官方文档的 Q&A 部分进行解释:

    PHP 下载线程安全是什么意思?

    线程安全意味着二进制文件可以在多线程 Web 服务器(例如 Apache 2)的上下文中运行在 Windows 上。线程安全的工作原理是在每个线程中创建本地存储的副本,因此数据不会与另一个线程发生冲突。

    那么我应该选择什么?如果您选择将 PHP 作为 CGI 二进制文件运行,则不需要线程安全,因为每个请求都会调用该二进制文件。对于IIS5、IIS6这样的多线程Web服务器,应该使用线程版本的PHP。

    总结一下,在比较Windows和Linux的部署方式时,除了Web服务器之外,最大的区别就是是否有PHP-FPM ,而 PHP-FPM 还没有原生的 Windows 版本,只能通过 Cygwin 运行。

    另一件需要考虑的事情是 PHP 扩展。如果使用的扩展不支持Windows平台,可以直接退出Windows Server。

    PHP On Windows

    微软专门建立了一个PHP for Windows网站,您可以在其中查看相关官方信息和技术支持文档。

    安装 IIS

    Windows Server 系统需要通过服务器管理添加 Web 服务器角色。需要注意的是,开发应用程序时必须检查CGI支持

    Windows 10 需要打开控制面板左中的程序和功能模块并启用或禁用 Windows 功能 但是,请注意,非服务器系统有一些限制,影响 RPS 性能。

    IIS内置用户组IIS_IUSER,与Linux中一样,相应的目录必须有相应的读写权限。在安全要求非常高的情况下,需要对每个站点进行用户隔离。一般来说,只需使用IIS_IUSER

    此外,Windows系统分区权限还有一些特殊的限制(类似于SElinux)。普通用户即使设置了NTFS写权限,仍然会出现写入问题。因此,通过将项目存储在非系统分区中,可以避免许多不必要的问题。

    NTFS文件系统权限配置相关具体操作可参考百度。

    • IIS 日志

    默认配置日志存储在系统驱动器路径中,通常为C:\inetpub\logs\LogFiles。可以在IIS管理器的根配置中统一修改,也可以针对站点单独配置。

    建议将日志根目录配置在非系统驱动器上,按位置拆分日志文件,并配置为每天持续更新。

    • 安装Web Platform Installer

    www.microsoft.com/web/downloa…

    一般来说,IIS已经安装了这个模块。如果没有,您可以手动安装。

    • 安装 URL 重写模块

    www.iis.net/downloads/m…

    部署 PHP 项目时需要安装的模块。

    注意:如果英文实在不好,可以在网站上下载中文(简体中文)版本,以确保安装的模块界面语言为中文。

    • 安装应用程序请求路由模块

    www.iis.net/downloads/m…

    一般PHP项目不需要。可以用来实现反向代理、代理缓存、负载均衡等功能。本模块界面语言为英语。

    安装PHP

    Windows系统推荐配置

    PHP和微软都建议安装WinCache扩展,该扩展可以与OpCache一起开启,对性能提升有显着影响。不过,启用OpCache和WinCache扩展可以有效提高性能,但建议在启用它们之前验证部署是否成功,以避免出现缓存故障排除问题。

    • 下载 Windows 版 PHP

    一般情况下,可以通过 Web 平台安装程序进行安装。如果所需版本不可用,您必须手动下载。

    打开 windows.php.net/download/ 并下载所需版本的 PHP 非线程安全版本。

    请注意,版本名称 VC15 x64 Non Thread Safe 表示 VC Runtime 的依赖版本。如果系统没有安装适当的 VC Runtime,它将无法启动。页面左侧有相应的下载链接。

    • 安装 PHP Manager for IIS

    github.com/phpmanager/…

    虽然可以手动注册 PHP FastCGI,但强烈建议使用 PHP Manager for IIS,它可以用来管理 PHP 配置和扩展。也很舒服。如果使用PHP FastCGI手动注册,则必须手动将index.php添加到IIS管理界面中的默认文档中。

    • WinCache PHP 扩展

    sourceforge.net/projects/wi...

    WinCache 配置官方文档 php.net/manual/en/w...。

    官方 OpCache 配置文档 php.net/manual/en/o....

    PHP 配置

    IIS 的 PHP 管理器可以轻松管理 PHP 相关的配置选项,也可以手动编辑 php.ini 配置。

    临时文件
    • PHP FastCGI 错误日志
    • 临时文件
    • 会话缓存

    PHP FastCGI 错误日志默认路径在 O\\MP WS›WSTe 目录,生产环境需要在 PHP Manager For IIS 中将服务器类型配置为生产环境。

    PHP 设置中有路径 upload_tmp_dirsession.save_path O\TeW♝ O\‼ O\‼

。如果需要修改路径,还必须注意目录权限。

文件上传限制

文件上传限制受以下因素影响:

  • Web 服务器
  • FastCGI

除了文件大小限制之外,超时限制也会影响可上传文件的大小。如果超时太短,超时前带宽不足以上传文件,也会导致上传失败。另外,文件系统也会导致上传失败,但可能性比较小。

安全配置

Microsoft 在 IIS 计划上为 PHP 提供了详细的安全实践 PHP 应用程序安全 | Microsoft Docs

  • 删除Web服务器版本信息

在IIS管理器的根页面,进入配置编辑器,找到❙›系统下的❙下的removeServerHeader项。 Web 服务器,将值调整为 True

可以将自定义标头 Server 添加到标头 HTTP 响应 ,例如 Ngin

  • 删除

    同样,可以将您自己的 X-Powered-By 添加到响应的 HTTP 标头,例如。

    • 请求过滤

    在请求过滤中,您可以设置允许的URL长度以及Web服务器端的查询字符串的长度。不过应用程序能否接收到完整的信息还取决于PHP-FastCGI的实现以及PHP代码的实现。

    通过请求过滤,可以阻止客户端访问特定路径。如果您使用Git直接获取代码进行部署,最好屏蔽路径.git。如果您习惯将压缩代码包放在目录中,则需要阻止访问特定路径上的文件.rar.zip

    注意:请确保您尚未启用目录浏览功能。

    其他

    如果需要同时运行一个页面的不同版本,或者每个页面都有单独的配置文件php.ini,可以参考微软配置PHP应用文档安全|操作微软文档。

    再次提醒我,访问本文中的目录权限并不是最安全的做法,而是为了方便而做出了妥协。

    作者:TomCzHen
    来源:掘金

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门