IIS7.0通过FastCGI方式运行PHP遇到的一些问题及解决方法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 经过二天的努力,终于把PHP网站从Apache迁移到IIS7上面,迁移过程中遇到一些问题,在这里和大家分享一下。 至今仍有一个问题,希望大家帮忙指点。   本文不会涉及如下内容: IIS7的安装 FastCGI For IIS7.

经过二天的努力,终于把PHP网站从Apache迁移到IIS7上面,迁移过程中遇到一些问题,在这里和大家分享一下。 至今仍有一个问题,希望大家帮忙指点。

 

本文不会涉及如下内容:

  1. IIS7的安装
  2. FastCGI For IIS7.0的安装和配置
  3. UrlScan的安装和配置
  4. 如何配置IIS7.0来运行PHP    
  5. 为什么要把PHP网站从Apache迁移到IIS7上面

 

如果您想了解上面的内容,你可以到http://www.iis.nethttp://www.php.net网站查看相关内容,在搜索引擎中也能找到很多参考资料。

 

在IIS7.0上以FastCGI方式配置好PHP运行环境,测试可以正常运行PHP程序后,将PHP程序部署上去,导入程序原来的数据和配置信息。由于Apache服务器在占用80端口,所以先停止Apache并设置IIS7.0使用80端口运行网站。 PHP程序终于在IIS7.0上跑起来了,看起来还不错,哈哈……

 

不过好像高兴的太早,很快就有问题出来啦L

 

一、某些图片无法显示

我的同事发现有不少图片无法显示。我感觉很奇怪,既然在Apache上没有问题,迁移到IIS7.0后,域名和文件路径均没有变化,不应该出现问题呀。我马上开始确认和排查问题,首先,根据同事的提供信息查看页面,果然很多图片无法显示;然后,我就随机看了网站中的图片,发现有些图片可以正常显示,而且不能正常显示的图片,都是路径中包含了日文或中文字符,这是为什么呢???

 

疯狂的折腾了一通之后,还是没有头绪,没有办法只能重新再浏览器中打开一张图片,希望可以从错误信息中找到一些有用的东西,只有404 File Not Found错误,没有其他有价值的参考信息。这时候我远程连接到服务器,在服务器上访问,哈哈……错误信息就比较详细了,如下图:

 img_3cefb914772a9606e27a47dfcf344c84.png

OMG,是UrlScan拒绝了该请求,在UrlScan的日志目录C:\Windows\System32\inetsrv\urlscan\logs\中打开一个日志文件,发现很多类似 "Rejected URL+contains+high+bit+character URL"的记录,这又是为什么呢???原来IIS7.0上安装UrlScan后,所有的请求都会经过aspnet_filter和Request Filtering的过滤,Request Filtering的过滤规则就在UrlScan的安装目录C:\Windows\System32\inetsrv\urlscan\UrlScan.ini文件中,其中有这样一个规则AllowHighBitCharacters=0,IIS官网的解释是: This feature either allows or rejects all requests to IIS 7 that contain non-ASCII characters and logs the error code 404.12,允许或拒绝所有包含非ASCII字符的请求并在日志中记录404.12错误,该规则默认为0,也就拒绝包含高位字符的请求 URL。我们将AllowHighBitCharacters的值改为1,图片终于可以正常显示了。

 

关于AllowHighBitCharacters的配置,UrlScan.ini中配置的规则是整个机器级别的,IIS7.0上的所有网站都适用。根据IIS官网的说明,还可以在网站级别配置。在IIS管理器中,你可以在左侧选择指定的网站后,在中间的功能区域选择"Request Filtering",双击该功能,在右侧的操作区域中点击"Edit Feature Settings"后,选中或者取消"allow high-bit characters"项即可;也可以直接在网站的web.config中添加如下内容:

img_95d17be91eaa44437015766d1138e4e1.png

但是,根据我的测试,如果在UrlScan.ini中配置AllowHighBitCharacters=0,那么在网站级别按照上面在web.config中配置AllowHighBitCharacters="true",根本就不起作用,IIS7.0依然拒绝处理路径中含有非ASCII字符的请求;如果在UrlScan.ini中配置AllowHighBitCharacters=1,那么在网站级别按照上面在web.config中配置AllowHighBitCharacters="true|false"就会起作用。

这又是为什么呢?希望有高手指点一下。

二、很多基于JQuery的功能失效了

日期选择框失效了,弹出层失效了,输入验证失效了……可是,这又是为什么呢? 

 

还好吃一堑长一智,这次直接去看UrlScan的日志,发现加载JS的记录很多都是" Rejected URL+contains+dot+in+path URL",然后就去看UrlScan.ini中的配置,在AllowHighBitCharacters下面有一个AllowDotInPath的配置,默认值也是0,也就是不允许在Url中出现除了扩展名之外的点字符[.],大家知道JQuery库和很多扩展插件的文件名称中都有点字符[.],将AllowDotInPath的值修改为1,打开网站就没有问题了,哈哈:)

注意:UrlScan.ini中关于AllowDotInPath的说明,除了测试外不建议将其设置为1,因为如果设置1,基于扩展名的检查将不在可信。

 

这二个问题解决后,从Apache迁移PHP程序到IIS7.0也算完成了。

 

最后,还有一个问题,就是我们的php网站在IIS7.0上运行,访问的时候,偶尔会有页面空白的情况发生,等一段时间就好了,直接回收或者重启进程池后也会好,不知道是什么问题?希望有了解此问题的园友,不吝赐教,给些指点,先在此谢过!

说明:这个问题已经解决,具体的操作就是减小http连接时间,同时增加应用程序池中的最大连接数和并发连接数。 

参考:

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
SQL 安全 程序员
PHP编程中的关键性错误及解决方法
在PHP编程过程中,程序员常常会遇到一些关键性错误,这些错误可能会导致程序运行异常甚至崩溃。本文将重点探讨PHP编程中常见的关键性错误,并提供解决方法,帮助程序员更好地应对这些问题,提高编程效率和代码质量。
39 1
|
6月前
|
程序员 网络安全 PHP
IIS使用PHPManager发布PHP网站
PHPManager是一款用于IIS(Internet Information Services)的工具,旨在简化在Windows服务器上发布PHP网站的过程。通过PHPManager,用户可以轻松管理PHP版本、配置PHP设置以及进行PHP应用程序的部署。这个工具提供了直观的用户界面,使用户能够更方便地与IIS服务器进行交互,而不需要深入了解服务器配置的技术细节。PHPManager的使用使得在IIS环境中托管和维护PHP网站变得更加便捷,提高了网站的部署效率和管理灵活性。
115 0
|
6月前
|
网络安全 PHP 开发者
IIS服务器发布PHP网站
IIS服务器,相信开发者都不会陌生,它的英文全称是Internet Information Services,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务,常用于Windows系统的Web项目部署,本篇以PHP项目为例,讲解如何使用IIS完成PHP项目的发布。
107 0
|
13天前
|
自然语言处理 编译器 应用服务中间件
PHP在服务器上的运行过程
PHP在服务器上的运行过程
31 7
|
13天前
|
数据库连接 PHP Apache
PHP在Apache中如何运行?
PHP在Apache中如何运行?
22 5
|
2月前
|
域名解析 关系型数据库 MySQL
基于PHPEnv的本地环境搭建—PHP第一个项目:HelloWorld(从安装到运行)
该文章指导如何使用PHPEnv搭建本地PHP开发环境,并通过一个简单的"Hello World"程序演示从安装到运行的全过程。
基于PHPEnv的本地环境搭建—PHP第一个项目:HelloWorld(从安装到运行)
|
2月前
|
安全 Shell Linux
从命令行界面运行交互式PHP Shell
从命令行界面运行交互式PHP Shell
|
3月前
|
前端开发 PHP 开发者
React Server Component 使用问题之怎么使用Docker运行PHP应用
React Server Component 使用问题之怎么使用Docker运行PHP应用
|
3月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
|
5月前
|
Ubuntu 关系型数据库 MySQL
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
82 0
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。