FastCGI是IIS下配置PHP的一个新东西,配置方便,不受PHP的32或64位影响。但是问题也存在,最近论坛总是时快时慢,慢的时候响应超过20秒,最近几天还出现php-cgi.exe进程爆增的情况,一次出来超过30个进程,导致服务器卡死,只有重新回收程序池才能处理掉,这样就非常差劲。
因为这样的情况我又想用会原来的ISAPI方式来运行PHP了, 也就是刚刚我才把ISAPI的运行环境完全搞定,为什么了?
1,ISAPI方式不支持64位系统,在IIS6下会提示不是32位程序,IIS7下提示脚本映射不对。
2,ISAPI是单进程,不会出现进程爆增的情况,先保证稳定再说。
现在说说我的配置经历:
在网上找了3个版本的PHP 64位程序,分别是5.2.5,5.3.6,5.3.8,可以说3个版本我是来回测试。
下面是我的第一步安装方式:
1,加压PHP包到PHP文件夹下,配置PHP.INI文件,这个步骤我就不多说了。
2,在win2003的iis 6里面建立好一个PHP的网站,在建好的网站上点鼠标右键,属性-主目录-配置,在“映射”中添加,“可执行文件”为PHP文件夹下的php5isapi.dll,扩展名为php,确定。
3,然后在"Web服务扩展"中“添加一个新的Web服务扩展”,“扩展名”为PHP,“要求的文件”选择PHP文件夹下的php5isapi.dll,确定,重新启动IIS。
一切正常的情况下(我在这里没出问题),phpinfo()是可以运行,也能看到运行数据的。但是我们仔细看运行数据,问题来了。
1,安装discuz论坛,GD库检测显示noext,mysql_conntect()显示不支持mysql,也是就是说论坛不能正常安装。
百度一个,找到很多转载的解决方案,基本无用,而且都是试探性的说话,没有根据,但是有资料总比没有好,我再次仔细的看了一下phpinfo()给我的数据。进行了如下配置。
1,将配置好的php.ini文件拷贝到c:\windows中,这个时候phpinfo()显示已经读取到了配置文件。
2,拷贝php5ts.dll,libmysql.dll到系统C:\Windows\SysWOW64中,因为我是64位系统。有的朋友反映没有libmysql.dll文件,这个是mysql的库文件,去安装mysql的文件夹下有个lib文件夹,拷贝一个libmysql.dll出来就是。当然我的mysql也是64位的。
3,配置php的目录到系统环境变量,我配置了2个,因为我的php在D盘,所以配置为:d:\php;d:\php\ext;
4,重启系统最好。做了以上工作,我的phpinfo()中显示了mysql已经配置成功。
然后安装论坛,一切OK。
不过终极的解决方案还是不要在windows下运行PHP,还是有些坑爹的,现在我连网站都要换成PHP来开发了,保持全站代码统一。
以上配置,要是有朋友不明白,可以留言给我,一起学习。
防止黑客侵入你正在使用的Windows系统
当黑客入侵一台主机后,会想方设法保护自己的“劳动成果”,因此会在肉鸡上留下种种后门来长时间得控制肉鸡,其中使用最多的就是账户隐藏技术。在肉鸡上建立一个隐藏的账户,以备需要的时候使用。账户隐藏技术可谓是最隐蔽的后门,一般用户很难发现系统中隐藏账户的存在,因此危害性很大,本文就对隐藏账户这种黑客常用的技术进行揭密。
在隐藏系统账户之前,我们有必要先来了解一下如何才能查看系统中已经存在的账户。在系统中可以进入“命令提示符”,控制面板的“计算机管理”,“注册表”中对存在的账户进行查看,而管理员一般只在“命令提示符”和“计算机管理”中检查是否有异常,因此如何让系统账户在这两者中隐藏将是本文的重点。
一、“命令提示符”中的阴谋
其实,制作系统隐藏账户并不是十分高深的技术,利用我们平时经常用到的“命令提示符”就可以制作一个简单的隐藏账户。
点击“开始”→“运行”,输入“CMD”运行“命令提示符”,输入“net user piao$ 123456 /add”,回车,成功后会显示“命令成功完成”。接着输入“net localgroup administrators piao$ /add”回车,这样我们就利用“命令提示符”成功得建立了一个用户名为“piao$”,密码为“123456”的简单“隐藏账户”,并且把该隐藏账户提升为了管理员权限。
我们来看看隐藏账户的建立是否成功。在“命令提示符”中输入查看系统账户的命令“net user”,回车后会显示当前系统中存在的账户。从返回的结果中我们可以看到刚才我们建立的“piao$”这个账户并不存在。接着让我们进入控制面板的“管理工具”,打开其中的“计算机”,查看其中的“本地用户和组”,在“用户”一项中,我们建立的隐藏账户“piao$”暴露无疑。
可以总结得出的结论是:这种方法只能将账户在“命令提示符”中进行隐藏,而对于“计算机管理”则无能为力。因此这种隐藏账户的方法并不是很实用,只对那些粗心的管理员有效,是一种入门级的系统账户隐藏技术。
二、在“注册表”中玩转账户隐藏
从上文中我们可以看到用命令提示符隐藏账户的方法缺点很明显,很容易暴露自己。那么有没有可以在“命令提示符”和“计算机管理”中同时隐藏账户的技术呢?答案是肯定的,而这一切只需要我们在“注册表”中进行一番小小的设置,就可以让系统账户在两者中完全蒸发。
1、峰回路转,给管理员注册表操作权限
在注册表中对系统账户的键值进行操作,需要到“HKEY_LOCAL_MACHINE\SAM\SAM”处进行修改,但是当我们来到该处时,会发现无法展开该处所在的键值。这是因为系统默认对系统管理员给予“写入D AC”和“读取控制”权限,没有给予修改权限,因此我们没有办法对“SAM”项下的键值进行查看和修改。不过我们可以借助系统中另一个“注册表编辑器”给管理员赋予修改权限。
点击“开始”→“运行”,输入“regedt32.exe”后回车,随后会弹出另一个“注册表编辑器”,和我们平时使用的“注册表编辑器”不同的是它可以修改系统账户操作注册表时的权限(为便于理解,以下简称regedt32.exe)。在regedt32.exe中来到“HKEY_LOCAL_MACHINE\SAM\SAM”处,点击“安全”菜单→“权限”,在弹出的“SAM的权限”编辑窗口中选中“administrators”账户,在下方的权限设置处勾选“完全控制”,完成后点击“确定”即可。然后我们切换回“注册表编辑器”,可以发现“HKEY_LOCAL_MACHINE\SAM\SAM”下面的键值都可以展开了。
2、偷梁换柱,将隐藏账户替换为管理员
成功得到注册表操作权限后,我们就可以正式开始隐藏账户的制作了。来到注册表编辑器的“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”处,当前系统中所有存在的账户都会在这里显示,当然包括我们的隐藏账户。点击我们的隐藏账户“piao$”,在右边显示的键值中的“类型”一项显示为0x3f0,向上来到“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\”处,可以找到“000003f0”这一项,这两者是相互对应的,隐藏账户“piao$”的所有信息都在“000003f0”这一项中。同样的,我们可以找到“administrator”账户所对应的项为“000001F4”。
将“piao$”的键值导出为piao$.reg,同时将“000003f0”和“000001F4”项的F键值分别导出为user.reg,admin.reg。用“记事本”打开admin.reg,将其中“F”值后面的内容复制下来,替换user.reg中的“F”值内容,完成后保存。接下来进入“命令提示符”,输入“net user piao$ /del”将我们建立的隐藏账户删除。最后,将piao$.reg和user.reg导入注册表,至此,隐藏账户制作完成。
3、过河拆桥,切断删除隐藏账户的途径
虽然我们的隐藏账户已经在“命令提示符”和“计算机管理”中隐藏了,但是有经验的系统管理员仍可能通过注册表编辑器删除我们的隐藏账户,那么如何才能让我们的隐藏账户坚如磐石呢?
打开“regedt32.exe”,来到“HKEY_LOCAL_MACHINE\SAM\SAM”处,设置“SAM”项的权限,将“administrators”所拥有的权限全部取消即可。当真正的管理员想对“HKEY_LOCAL_MACHINE\SAM\SAM”下面的项进行操作的时候将会发生错误,而且无法通过“regedt32.exe”再次赋予权限。这样没有经验的管理员即使发现了系统中的隐藏账户,也是无可奈何的。
三.专用工具,使账户隐藏一步到位
虽然按照上面的方法可以很好得隐藏账户,但是操作显得比较麻烦,并不适合新手,而且对注册表进行操作危险性太高,很容易造成系统崩溃。因此我们可以借助专门的账户隐藏工具来进行隐藏工作,使隐藏账户不再困难,只需要一个命令就可以搞定。
我们需要利用的这款工具名叫“HideAdmin”,下载下来后解压到c盘。然后运行“命令提示符”,输入“HideAdmin piao$ 123456”即可,如果显示“Create a hiden Administrator piao$ Successed!”,则表示我们已经成功建立一个账户名为piao$,密码为123456的隐藏账户。利用这款工具建立的账户隐藏效果和上文中修改注册表的效果是一样的。
四、把“隐藏账户”请出系统
隐藏账户的危害可谓十分巨大。因此我们有必要在了解了账户隐藏技术后,再对相应的防范技术作一个了解,把隐藏账户彻底请出系统
1、添加“$”符号型隐藏账户
对于这类隐藏账户的检测比较简单。一般黑客在利用这种方法建立完隐藏账户后,会把隐藏账户提升为管理员权限。那么我们只需要在“命令提示符”中输入“net localgroup administrators”就可以让所有的隐藏账户现形。如果嫌麻烦,可以直接打开“计算机管理”进行查看,添加“$”符号的账户是无法在这里隐藏的。
2、修改注册表型隐藏账户
由于使用这种方法隐藏的账户是不会在“命令提示符”和“计算机管理”中看到的,因此可以到注册表中删除隐藏账户。来到“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names”,把这里存在的账户和“计算机管理”中存在的账户进行比较,多出来的账户就是隐藏账户了。想要删除它也很简单,直接删除以隐藏账户命名的项即可。
3、无法看到名称的隐藏账户
如果黑客制作了一个修改注册表型隐藏账户,在此基础上删除了管理员对注册表的操作权限。那么管理员是无法通过注册表删除隐藏账户的,甚至无法知道黑客建立的隐藏账户名称。不过世事没有绝对,我们可以借助“组策略”的帮助,让黑客无法通过隐藏账户登陆。点击“开始”→“运行”,输入“gpedit.msc”运行“组策略”,依次展开“计算机配置”→“Windows 设置”→“安全设置”→“本地策略”→“审核策略”,双击右边的“审核策略更改”,在弹出的设置窗口中勾选“成功”,然后点“确定”。对“审核登陆事件”和“审核过程追踪”进行相同的设置。
4、开启登陆事件审核功能
进行登陆审核后,可以对任何账户的登陆操作进行记录,包括隐藏账户,这样我们就可以通过“计算机管理”中的“事件查看器”准确得知隐藏账户的名称,甚至黑客登陆的时间。即使黑客将所有的登陆日志删除,系统还会记录是哪个账户删除了系统日志,这样黑客的隐藏账户就暴露无疑了。
5、通过事件查看器找到隐藏帐户
得知隐藏账户的名称后就好办了,但是我们仍然不能删除这个隐藏账户,因为我们没有权限。但是我们可以在“命令提示符”中输入“net user 隐藏账户名称 654321”更改这个隐藏账户的密码。这样这个隐藏账户就会失效,黑客无法再用这个隐藏账户登陆。
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。同时,设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存
一般来说,这样就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。
那么,怎么样才能找到是哪一个网站的?
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池
3、到iis中察看该应用程序池对应的网站,就ok了。
最近公司服务器总出现CPU100%占用情况,服务器配置为双核Xeon3.0x2,2G ECC内存。
发现是w3wp.exe长时间占用大量CPU.出现这种情况应该是网站程序存在死循环等问题所致。
在找到问题以前可以暂时采取限制w3wp进程CPU使用率的方法保证网站可以将就着工作:
在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。
解决CPU占用过多:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。
根据w3wp取得是哪一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在 C:windowssystem32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script Host”来执行,就可以得到PID与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。
解决内存占用过多,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500M),就自动回收内存。
我的设置如下:
首先是对CPU的限制:在启用cpu监视后,我设置该应用程序池最大的cpu使用率为50%。设置刷新cpu时间为1分钟,设置操作为“关闭”。最大工作进程数设置为1。这个意思是,IIS刷新检测该独立池的CPU使用情况时间为1分钟,如果超过设置的cpu限制50%,就会发出关闭池的指令,要求池在指定的时间内关闭。如果池成功在这个时间内关闭,IIS会重启动一个新池,此段时间很短,一般不会有什么感觉,池就重新开启了,对于访问网站的人基本是不会有感觉的。但如果池没有在指定时间内关闭,IIS就会强行关闭它一个刷新CPU时间。在这个停止的时间内,网站无法访问,提示“Service Unavaliable”。
关闭时间和启动时间间隔设置:设短一些比如10秒,这样当您的网站程序大量占用系统资源时IIS自动快速回收进程并且快速启动进程,您的网站暂时还可以将就着工作。
对内存的限制及进程回收时间的设置:我设置为内存占用超过800M就自动回收内存,虚拟内存没有做限制。进程回收时间我保持默认没有修改。各位可以根据自己的情况设置更短的时间。对应用程序池最大虚拟内存也可以在此进行设置,超过了设置的最大虚拟内存,该池会就被回收。
最后综合落伍wlmmc的一些经验,总结一些需要注意的问题:
1、 要限制一个站点的CPU使用,必须将该站点设置为独立应用程序池,共用应用程序池是无法限制单个站点的。IIS独立应用程序池,就需要独立的进程,非常消耗内存。独立池越多,就有越多的W3WP进程。对于每个站点均要独立应用程序池的服务器,在一般的普通P43.0 2G内存的普通服务器上,建议不要超过50个站点,最好30以内,不然服务器压力非常大。在配置上,我一般把资源消耗较大的网站独立一个池,一般普通BBS或者生成HTML的系统大概5个站一个池。普通网站以及一些企业站点均共用一个池。
2、根据wlmmc的经验,在服务器硬件允许的情况下,一般不要限制站点内存使用,这样能够保证网站运行,不会出现用户掉线情况。需要限制某站的最大虚拟内存不要小于64M,不然可能出现一些未知的错误。
3、这些都不是根本解决办法,它的根本问题是网站程序有问题,要解决根本问题还要从程序查起。根据本文开头提到的方法查到具体的应用程序池,找到使用此应用程序池的网站,解决网站程序存在的问题,如死循环之类。
4、除了w3wp.exe, 在调用数据库进行大量查询操作的时候,也会大量占用CPU资源,这是难免的(数据库方面的语句及结构优化不在本文讨论范围之内)。个人认为,只要不是CPU长时间占用100%, 一般在75%左右都是正常的。
非常愿意和各位在服务器配置、优化、安全等方面进行交流和讨论。