IIS7.0通过FastCGI方式运行PHP遇到的一些问题及解决方法-阿里云开发者社区

开发者社区> 不能超过五> 正文

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

简介: 经过二天的努力,终于把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连接时间,同时增加应用程序池中的最大连接数和并发连接数。 

参考:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6417 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3975 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7630 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5002 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9341 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
2042 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
16318 0
+关注
不能超过五
主要关注分布式系统、项目管理、教育行业互联网应用研发和运维
22
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载