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

经过二天的努力,终于把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错误,没有其他有价值的参考信息。这时候我远程连接到服务器,在服务器上访问,哈哈……错误信息就比较详细了,如下图:

 

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中添加如下内容:

但是,根据我的测试,如果在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连接时间,同时增加应用程序池中的最大连接数和并发连接数。 

参考:

  1. http://learn.iis.net/page.aspx/143/use-request-filtering/
  2. http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-7/
时间: 2024-10-26 23:47:43

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

IIS 5.1 上运行不支持转换Decimal类型小数点解决方法

iis 5.1 上运行不支持转换decimal类型小数点解决方法 解决问题的方法: 在web.config文件中的system.web 节点中加上: <globalization  culture="国家代码" uiculture ="国家代码"/> 如:  <globalization culture="en-us" uiculture ="en-us"/>  

php错误提醒FastCGI Error Error Number: -2147467259 (0x80004005)错误原因及解决方法

本文转自IT摆渡网欢迎转载,请标明出处 更多php文章请阅读 php问题解决 我的PHP是IIS模式的,今天出现这种错误提示:FastCGI Error The FastCGI Handler was unable to process the request. //FastCGI无法处理请求,出现这种错误多见于在IIS中以FastCGI模式运行PHP的情况,原因是php.ini配置的问题,费话不多说,这里直接给出解决方法,不浪费时间. 1.打开php.ini找到register_globals

Win8系统IE浏览运行开发者调试模式显示空白的解决方法

  IE浏览器开发者调试模式是帮助web前端开发者调试页面所使用的一种工具,通常情况下用户很少使用该功能,只有网页设计者会经常使用到,不过有些开发者反映在IE浏览器中运行F12开发者模式出现空白的问题,对于该问题小编发现由于系统缺少一个动态组件库造成的,只需要将该组件重新下载并且注册即可解决,下面看为大家带来的解决方法! 原因分析: 由于F12Resources.dll的缺失造成的,通常情况下造成该文件缺失主要由安全软件的误杀或病毒文件的破坏所致! 解决方法: 1.首先尝式打开杀毒软件,看隔离区

ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword &#039;AS&#039;的解决方法_php实例

问题代码如下: <?php class IndexAction extends Action{ public function index(){ /* $Model = new Model(); $test = $Model->query('select top 10 * from f_city'); dump($test); */ $CityModel = M('city'); $CityModel->find(); dump($CityModel); } } ?> 出现的情况是

iis6和iis7限制上传文件(请求头)大小以及不支持FSO解决方法_win服务器

解决办法: 一.IIS6 (2003操作系统) 2003 自带的IIS6.0默认限制上传大小限制为200K,下载限制为4M,因此出现上面的问题,解决如下: 1.先打开Internet 信息服务(IIS)管理器 (本地计算机 )---- 属性 ----允许直接编辑配置数据库(N) 一定要勾先"允许直接编辑配置数据库(N)" 2.然后在服务里关闭iis admin service服务,可用命令:iisreset/stop 3.找到windows\system32\inesrv\下的base

win7 iis7.5 乱码 和 解析不了ASP的ADO连接数据库 的解决方法_win服务器

你是否发现自己的网站刷新一遍的时候出现乱码呢 好了这里我们就来说说解决的方法...首先说说第一个问题, 这个问题刚开始让自己百思不得其解啊,头疼死的问题 不过自己发现的是个凑巧吧, 因为刚开始配置iis7.5的时候 直接安装了asp.net 虽然没了解过这方面的知识,不过还是发现了asp.net配置过程中会在WEB根目录下生成一个所谓的web.config, 那时候觉得这个文件奇怪 于是直接删除了,然后运行自己的ASP文件发现问题转化了 出现了ODBC连接错误,不过还是一大堆的乱码..好了废话不

SureHA 1.0集群进入设定模式出现JAVA安全提示的解决方法

SureHA 1.0集群进入设定模式时,可能出现JAVA安全提示如下:   解决方案: 在运行输入:    代码如下 复制代码 notepad %HOMEDRIVE%%HOMEPATH%.java.policy 在弹出的记事本中输入(http后面的内容根据实际的提示填写)并保存.    代码如下 复制代码 grant codeBase "http://localhost:29003/clptrek.jar" {    permission java.security.AllPermis

iis7下url重写后已存在的html不能访问了的解决方法

本文为大家详细介绍下iis7下url重写后,原本存在的html不能访问了,未能执行URL(asp.net对真正的.html(但不符合重写规的)就不知道如何处理了),遇到类似情况的朋友可以参考下   当把.html的url都交与asp.net处理时(IIS不再插手了),伪.html可以对应aspx执行,而asp.net对真正的.html(但不符合重写规的)就不知道如何处理了,导致这次请求没有 作任何处理. 就出现了以下错误: ""/"应用程序中的服务器错误. ---------

Win8下运行代理软件系统出现蓝屏的解决方法

  电脑的使用过程中时不时会出现蓝屏的现象,很多情况都能会引起电脑蓝屏的问题,但是大家并没有找出一个标准的解决方案,所以对于这样的现象大家都习以为常了.最近有用户发现了一种新的造成电脑蓝屏的原因,只要一打开代理软件,win8系统的电脑就会蓝屏,但是有很多的代理软件,并不能判断出具体是哪一款软件的原因,既然大家都为电脑蓝屏的事这么的烦恼,下面小编就和大家分享一下,教大家如何解决Win8打开代理软件时蓝屏问题. 解决方法 通过蓝屏分析工具得知,蓝屏是由于驱动程序所导致 : NETIO.SYS,那么原