cgifastcgi占用率高
在web服务器配置中优化fastcgi配置文件参数。
php-cgi进程并没有内存泄漏,php-cgi会在每个请求结束的时候回收脚本使用的全部内存,但是并不会释放给操作系统,而是继续持有以应对下一次PHP请求。这样做大概是为了减少内存碎片化或者解决从系统申请内存之后又释放回操作系统所需要的时间不可控问题。可是如果偶然一次PHP请求使用了诸如ftp或者zlib这样的大内存操作,那么将导致一大块系统内存被php-cgi持续占有,不能被利用。
是php53以下版本的安装方法。
1、首先是下载PHP安装文件和MYSQL安装文件,请注意MYSQL有很多个版本,有社区版、标准版、企业版、集群版,其中只有社区版是免费的。
2、在服务器上配置好IIS,推荐IIS7以上版本,控制面板-打开或关闭windows功能-万维网服务-应用程序开发功能里选上对应就可安装。
3、配置php环境:把php压缩包解压到C:\php目录下面,然后找到phpini-dist,更名为phpini,
修改里面的扩展目录
extension_dir
=
“C:\php\ext\”。
把以下扩展前面的分号去掉以启用
extension=php_curldll
extension=php_gd2dll
extension=php_mysqldll
fastcgiimpersonate=1
默认为0,如果使用IIS,需要开启
cgifix_pathinfo=1
cgiforce_redirect=0
默认开启,如果使用IIS,可以将其关闭
其次指定extension_dir目录和datetimezone,即
extension_dir =
"C:/php53iis/ext"
datetimezone=
Asia/Shanghai
4、然后把extension=php_mysqldll前面的分号去掉,保存并把phpini复制到系统Windows目录下面。
5、然后依次打开我的电脑(右键)->管理->服务和应用程序->Internet信息服务(IIS)管理器,打开ISAPI和CGI限制,然后添加php的ISAPI的执行文件php5isapidll
6、配置Mysql:把下载的mysql文件直接安装即可,然后复制php目录下面的libmysqldll到系统Windows下面的System32目录里。
7、重启IIS,即完工。
如果是php53及以上版本,根本没有php5isapidll,也不需要把phpini移动到windows安装目录,建议采用安装版,直接安装即可。
1.Web服务器存在的漏洞
一般来说,Web服务器上可能存在的漏洞有以下几种。
1)Web服务器因各种原因而不能返回客户要访问的秘密文件、目录或重要数据。
2)远程用户向服务器发送信息时,特别是像之类的重要信息时,中途遭不法分子非法拦截。
3)入侵者可能突破Web服务器本身存在的一些漏洞,破坏其中的一些重要数据,甚至造成系统瘫痪。
4)CGI(Common Gateway Interface,公共网关接口)安全方面存在的漏洞。CGI是Web信息服务与外部应用程序之间交换数据的标准接口。它具有两个功能:收集从Web浏览器发送给Web服务器的信息,并且把这些信息传送给外部程序;把外部程序的输出作为Web服务器对发送信息的Web浏览器的响应,送给该Web浏览器。通过CGI程序,Web服务器真正实现了与Web浏览器用户之间的交互。在HTML文件中,表单(Form)与CGI程序配合使用,共同来完成信息交流的目的。
CGI可能的漏洞有:有意或无意地在主机系统中遗漏bug,给非法黑客创造条件;用CGI脚本编写的程序在涉及远程用户从浏览器中输入表单或进行检索(Search Index)时,会给Web主机系统造成危险。因此,从CGI角度考虑Web的安全性,主要是在编制程序时,应详细考虑到安全因素,尽量避免CGI程序中存在漏洞。
因此,不管是配置服务器,还是在编写CGI程序时都要注意系统的安全性。应该堵住任何存在的漏洞,创造安全的环境。
从Web服务器版本上来看,NCSA13以下版本的HTTPd明显存在安全上的漏洞,即客户计算机可以任意地执行服务器上面的命令,这对于服务器来说是非常危险的。但是NCSA14以上版本的服务器补上了这个缺陷。
2.Web服务器的安全策略和安全机制
Web服务器的安全策略是由个人或组织针对安全而制定的一整套规则和决策。每个Web站点都应有一个安全策略,这些安全策略因需求的不同而各不相同。对Web服务提供者来说,安全策略的一个重要的组成是哪些人可以访问哪些Web文档,同时还定义获权访问Web文档的人和使用这些访问的人的有关权力和责任。采取何种安全措施,取决于制定的安全策略。必须根据需要和目标来设置安全措施,估计和分析安全风险。制定Web站点的安全策略的基本原则是不要为细节所困扰。
安全机制是实现安全策略的技术或手段。必须根据需要和目标来设置安全系统,估计和分析可能的风险。定义安全策略,选择一套安全机制,首先要做的是威胁分析,主要包括以下几个方面。
1)有多少外部入口点存在看有哪些威胁看
2)研究谁会对网络产生威胁:威胁来自黑客,还是训练有素的有知识的入侵者,或是来自工业间谍看
3)分析会有什么样的威胁:入侵者访问哪些数据库、表、目录或信息看威胁是网络内部的非授权使用,还是移动数据看
4)数据是遭受到了破坏,还是受到了攻击看攻击是网络内、外的非授权访问,还是地址欺骗、IP欺骗及协议欺骗等看
5)确定安全保护的目标。
6)提出价格合理的安全机制。
根据威胁程度的大小、方向和入侵的对象,进行分析评价,作为制定Web的安全策略和设计网络安全措施的基本依据。安全设计时,要优先考虑必要的且可行的步骤,正确制定安全策略,并采取必要的安全措施。
具体来说,不管是配置服务器,还是在编写CGI程序时都要注意系统的安全性。尽量堵住任何可能出现的漏洞,创造安全的环境。在具体服务器设置及编写CGI程序时应该注意以下几点:
1)禁止乱用从其他网站下载的一些工具软件,并在没有详细了解之前尽量不要用root身份注册执行,以防止某些程序员在程序中设下的陷阱。
2)在选用Web服务器时,应考虑到不同服务器对安全的要求不一样。一些简单的Web服务器就没有考虑到一些安全的因素,不能把他用于商业应用,只能作一些个人的网点。
3)在利用Web中的htpass来管理和校验用户口令时,校验的口令和用户名不受次数的限制。
对Web服务器和Web客户来说,最重要的安全提升机制如下:
1)主机和网络的配套工具和技术;
2)Web应用程序的配置;
3)Web服务的认证机制;
4)防火墙;
5)日志和监视。
每种机制都涉及某种类型系统的安全性,并且它们之间是相互联系的。
3.组织Web服务器
大多数Web服务器都会记录它们收到的每一次连接和访问。这个记录一般包括IP地址和主机名。如果站点采取一些形式的验证系统,服务器也会记录用户名。如果用户在逗留期间填写了任何表格,该表格下所有变量的值都会被记录在案。包括请求的状态、传递数据的大小、用户E-mail地址等。一些浏览器和服务器一样,甚至也能提供有关使用中的浏览器、URL、客户的IP地址,以及用户的E-mail地址等信息。这些记录对于发现和跟踪黑客袭击是很有用的。
组织Web服务器一般包括以下几个方面的内容:认真选择Web服务器设备和相关软件;配置Web服务器,使用它的访问和安全特性;组织和Web服务器相关的内容。组织主要包括以下步骤:
1)联机检查。检查源程序,查看连接URL和相应的内容是否图文一致,查看URL所提供的内容是否和网页的描述一致。检查驱动器和共享的权限,系统设为只读状态。
2)检查HTTP服务器使用的Applet脚本,尤其是与其客户交互作用的CGI脚本,防止非法用户恶意使用CGI程序,执行内部指令,对Web 服务器造成破坏。
3)充分考虑最糟糕的情况后,配置自己的系统,即使黑客完全控制了系统,他还要面对一堵高墙。
4)将敏感文件放在基本系统中,再设二级系统,使所有的敏感数据不向Internet开放。
4.安全管理Web服务器
安全管理Web服务器,可以从以下几个方面采取一些预防措施:
1)对于在Web服务器上所开设的账户,应在口令长度及修改期限上做出具体要求,防止被盗用。
2)限制在Web服务器上开账户,定期删除一些短进程的用户。
3)尽量在不同的服务器上运行不同的服务(如mail服务和Web服务等)程序。尽量使FTP, mail等服务器与Web服务器分开,去掉FTP, sendmail, tftp, NIS, NFS, finger, netstat等一些无关的应用。这样在一个系统被攻破后,不会影响到其他的服务和主机。
4)如果不需要,尽量关闭Web服务器上的特性服务,否则,有可能遭到该特性所导致的安全威胁。在Web服务器上去掉一些绝对不用的shell等解释器,即当在CGI程序中没用到Perl(Practical Extraction and Report Language)时,就尽量把Perl在系统解释器中删除掉。
5)定期查看服务器中的日志logs文件,应该定期地记录Web服务器的活动,分析一切可疑事件。其中,最重要的是监视那些试图访问服务器上的文档的用户。
6)设置好Web服务器上系统文件的权限和属性,对可访问的文档分配一个公用的组,如WWW,并且只给它分配只读的权限。把所有的HTML文件归属WWW组,由Web管理员管理WWW组,并且只有Web管理员具有对Web配置文件写的权限。
7)有些Web服务器把Web的文档目录与FTP目录指在同一目录,应该注意不要把FTP的目录与CGI-BIN指定在一个目录之下。这是为了防止一些用户通过FTP上的Perl或SH之类的程序,并用Web的CGI-BIN去执行造成不良后果。
8)通过限制访问用户IP或DNS。限制CGI-BIN目录(即存放可执行的脚本和程序目录)的访问或使用权限,该目录只有系统管理员具有写的权限。为了系统的安全性,所有的脚本和程序都应该存放在服务器上的某个目录下。另外,许多Web服务器本身存在一些安全上的漏洞,需要在版本升级时不断地更新。
无论多么安全的站点,都可能被破坏,都有可能遭到黑客的攻击。所以,一定要沉着冷静地处理意外事件。
5.Web服务器的安全措施
1)从基本做起
针对Web服务器的安全,我们应从最基本的安全措施做起,这是最保险的安全方式。比如说,将服务器上含有机密数据的区域都转换成NTFS格式;防毒程序也必须按时升级更新,同时在服务器和桌面计算机上安装防毒软件,这些软件可设定成每天自动下载最新的病毒库文件。Exchange Server(邮件服务器)上也安装上防毒软件,这类软件可扫描所有寄来的电子邮件,寻找被病毒感染的附件,若发现病毒,邮件马上会被隔离,降低使用者被感染的机会。
另一个保护网络的好方法是限定使用者登录网络时的权限。存取网络上的任何数据都必须通过密码登录。在设定密码时,混用大小写字母、数字和特殊字符。在Windows NT Server Resource Kit里就有这样的工具软件。还要设定定期更新密码,且密码长度不得少于8个字符。
2)备份保护
大多数人都没有意识到,备份本身就是一个巨大的安全漏洞。因此,最好利用密码保护好备份磁盘,若备份程序支持加密功能,还可以将数据进行加密。
3)使用RAS的回拨功能
Windows NT支持服务器远端存取(Remote Access Service,RAS),但同时,RAS服务器对黑客来说也非常方便,只需要一个电话号码和一点耐心,他们就能通过RAS进入主机。因此,如果远端用户经常是从家里或是固定的地方上网,可以使用回拨功能,允许远端用户登录后立即挂断,然后RAS服务器会拨出预设的电话号码接通用户,因为此电话号码已经预先在程序中,黑客也就没有机会指定服务器回拨的号码了。
另一个办法是限定远端用户只能存取单一服务器。可以将用户经常使用的数据复制到RAS服务器的一个特殊共用点上,再将远端用户的登录限制在一台服务器上,而非整个网络。如此一来,即使黑客入侵主机,也只能在单一机器上作怪,可以在很大程度上减小其产生的破坏性。
最后就是在RAS服务器上使用逗另类地网络协议。可以把TCP/IP协议当做RAS协议。当RAS还支持IPX/SPX和NetBEUI协议时,使用NetBEUI当做RAS协议,可以将非法入侵者搞得晕头转向。
4)注重工作站的安全
工作站是进入服务器的大门,加强工作站的安全能够提高整个网络的安全性。对于初学者,可以在所有工作站上使用Windows 2000,这是一个比较安全的操作系统。这样就能将工作站锁定,若没有权限,一般人将很难取得网络配置信息。
可以限制使用者只能从特定的工作站进行登录,将工作站当做简易型的终端机(dumb terminal),或者说是智慧型的简易终端机。换言之,工作站上不会存有任何数据或软件,将计算机当做dumb terminal使用时,服务器必须执行Windows的终端服务程序,而且所有应用程序都只在服务器上运作,工作站只能被动接收并显示数据。
5)及时升级或修补程序
在微软公司内部有一组工作人员专门检查并修补安全漏洞,这些修补程序(补丁)有时会被收集成服务包(service pack)发布。服务包通常有两种不同版本:一个是任何人都可以使用的40位的版本,另一个是只能在美国和加拿大发行的128位版本。128位版本使用128位的加密算法,比40位的版本要安全得多。
6.Web服务器安全的几个要素
建立一个安全的Web网站要求用户必须对Web服务器的安全性有全面的认识。从信息发布平台内部来看,应该做到如下几点:
1)恰当地配置Web服务器,只保留必要的服务,删除和关闭无用的或不必要的服务。因为启动不必要的服务可能使他人获得系统信息,甚至获取密码文件。
2)增强服务器操作系统的安全,密切关注并及时安装系统及软件的最新补丁;建立良好的账号管理制度,使用足够安全的口令,并正确设置用户访问权限。
3)对服务器进行远程管理时,使用如SSL等安全协议,避免使用Telnet、FTP等程序,因为这些程序是以明文形式传输密码的,容易被监听;严格控制远程root身份的使用,仅在绝对需要时才允许使用具有高授权的操作。
4)禁止或限制CGI程序和ASP、PHP脚本程序的使用。因为这些程序会带来系统的安全隐患,而且某些脚本程序本身就存在安全漏洞。
5)使用防火墙及壁垒主机,对数据包进行过滤,禁止某些地址对服务器的某些服务的访问,并在外部网络和Web服务器中建立双层防护。利用防火墙,将服务器中没有必要从防火墙外面访问的服务及端口阻隔,进一步增强开放服务的安全性。
6)使用入侵检测系统、监视系统、事件、安全记录和系统日志,以及网络中的数据包,对危险和恶意访问进行阻断、报警等响应。
7)在网关和服务器上使用多层次的防病毒系统,尤其对于允许上传和交互信息发布的服务器来说,防止病毒及木马程序的侵入是保证服务器系统安全的一个关键。
8)使用漏洞扫描和安全评估软件,对整个网络进行全面的扫描、分析和评估,从用户账号约束、口令系统、系统监测、访问控制、数据加密、数据完整等多方面进行安全分析和审计。建立和提高用户的安全策略,及时发现并弥补安全漏洞
配置Apache web服务器,让其能运行CGI脚本
在这个教程里,我们假设Apache web服务器已经安装好,并已运行。这篇教程使用的Apache web服务器(版本2215,用于CentOS发行版65)运行在本地主机(127001),并且监听80端口,如下面的Apache指令指定一样:
ServerName 127001:80Listen 80
下面举例中的HTML文件存放在web服务器上的/var/www/html目录下,并通过DocumentRoot指令指定(指定网页文件所在目录):
DocumentRoot "/var/www/html"
现在尝试请求URL:http://localhost/page1html
这将返回web服务器中下面文件的内容:
/var/www/html/page1html
为了启用CGI脚本,我们必须指定CGI脚本在web服务器上的位置,需要用到ScriptAlias指令:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
以上指令表明CGI脚本保存在web服务器的/var/www/cgi-bin目录,请求URL里包含/cgi-bin/的将会搜索这个目录下的CGI脚本。
我们必须还要明确CGI脚本在/var/www/cgi-bin目录下有执行权限,还要指定CGI脚本的文件扩展名。使用下面的指令:
<Directory "/var/www/cgi-bin"> Options +ExecCGI AddHandler cgi-script py</Directory>
下面访问URL:http://localhost/cgi-bin/myscript-1py
这将会调用web服务器中下面所示脚本:
/var/www/cgi-bin/myscript-1py
创建一个CGI脚本
在创建一个Python CGI脚本之前,你需要确认你已经安装了Python(这通常是默认安装的,但是安装版本可能会有所不同)。本篇教程使用的脚本是使用Python版本266编写的。你可以通过下面任意一命令(-V和--version参数将显示所安装Python的版本号)检查Python的版本。
$ python -V$ python --version
如果你的Python CGI脚本要用来处理用户输入的数据(从一个web输入表单),那么你将需要导入Python cgi模块。这个模块可以处理用户通过web输入表单输入的数据。你可以在你的脚本中通过下面的语句导入该脚本:
import cgi
你也必须修改Python CGI脚本的执行权限,以防止web服务器不能调用。可以通过下面的命令增加执行权限:
# chmod o+x myscript-1py
Python CGI例子
涉及到Python CGI脚本的两个方案将会在下面讲述:
使用Python脚本创建一个网页
读取并显示用户输入的数据,并且在网页上显示结果
注意:Python cgi模块在方案2中是必需的,因为这涉及到用户从web表单输入数据。
例子1 :使用Python脚本创建一个网页
对于这个方案,我们将通过创建包含一个单一提交按钮的网页/var/www/html/page1html开始。
<html><h1>Test Page 1</h1><form name="input" action="/cgi-bin/myscript-1py" method="get"><input type="submit" value="Submit"></form></html>
当"提交"按钮被点击,/var/www/cgi-bin/myscript-1py脚本将被调用(通过action参数指定)。通过设置方法参数为"get"来指定一个"GET"请求,服务器将会返回指定的网页。/var/www/html/page1html在浏览器中的显示情况如下:
/var/www/cgi-bin/myscript-1py的内容如下:
#!/usr/bin/pythonprint "Content-Type: text/html"print ""print "<html>"print "<h2>CGI Script Output</h2>"print "<p>This page was generated by a Python CGI script</p>"print "</html>"
第一行声明表示这是使用 /usr/bin/python命令运行的Python脚本。"Content-Type: text/html"打印语句是必需的,这是为了让web服务器知道接受自CGI脚本的输出类型。其余的语句用来输出HTML格式的其余网页内容。
当"Submit"按钮点击,下面的网页将返回:
这个例子的要点是你可以决定哪些信息可以被CGI脚本返回。这可能包括日志文件的内容,当前登陆用户的列表,或者今天的日期。在你处理时拥有所有python库的可能性是无穷无尽的。
第一步: 安装apache 并配置支持PHP
点击安装文件apache_2050-win32-x86-no_sslmsi
将apache安装在 D:\apache2 目录(随自己喜好)下
将php-500-Win32zip 里内容解压到 D:\php 里
找到 php目录里的 phpini-dist 重命名为 phpini 并拷到 windows目录里(win2k 里为winnt)
如我的phpini是拷到 D:\windows目录
再将php目录里的 php5tsdll,libmysqldll 拷到 系统目录(system/system32) 如我的是D:\windows\system里
配置apache里的httpdconf
打开 D:\Apache2\conf\httpdconf 这个文件
找到 AddDefaultCharset ISO-8859-1 将其改为 AddDefaultCharset GB2312 (让默认语言编码为简体中文)
找到 DocumentRoot "D:/Apache2/htdocs" 将其改为你的WEB目录(可不改)如我的为 DocumentRoot "D:/website"
找到 DirectoryIndex indexhtml indexhtmlvar 在后面加入 indexhtm indexphp
选择安装模式: 模块化模式安装 或 CGI模式安装 (选一样即可)
--------------模块化安装配置------------------------------------
找到 #LoadModule ssl_module modules/mod_sslso 这行,在此行后加入一行
LoadModule php5_module d:/php/php5apache2dll
其中d:/php/php5apache2dll 为你php目录中php5apache2dll所在的位置
找到 AddType application/x-gzip gz tgz 这行,在此行后加入一行
AddType application/x-httpd-php php
---------------------------------------------------------------
--------------CGI安装配置--------------------------------------
找到 AddType application/x-gzip gz tgz 这行,加入如下即可
ScriptAlias /php/ "d:/php/"
AddType application/x-httpd-php php
Action application/x-httpd-php "/php/php-cgiexe"
---------------------------------------------------------------
此时PHP环境基本已经配置成功
在WEB根目录(如我的D:\website)里建一个名为testphp的文件内容如下
< echo phpinfo(); >
重新启动apache服务
用浏览器打开 http://localhost/testphp ;
如果可以看到php配置输出信息就OK了
第二步 安装mysql
将mysql安装到指定目录,如我的是d:/mysql 如下载的是非安装的mysql压缩包,直接解压到指定目录就可以了
然后点击D:\mysql\bin\winmysqladminexe这个文件 其中D:\mysql是你的mysql安装目录
输入winmysqladmin的初始用户、密码 (注:这不是mysql里的用户、密码)随便填不必在意
确定之后你的右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务
再左击这个图标->winnt->start the service 启动mysql服务
修改mysql数据库的root密码
用cmd进入命今行模式输入如下命令: ( 注: d:\mysql 为mysql安装目录)
cd d:\mysql\bin
mysqladmin -u root -p password 123456
回车出现
Enter password: ( 注:这是叫你输入原密码 刚安装时密码为空,所以直接回车即可)
此时mysql 中账号 root 的密码 被改为 123456 安装完毕
三、配置phpini并测试mysql(phpini为 d:\windows下的 phpini)
找到extension_dir = "/" 改为 extension_dir = "d:/php/ext"
找到
;extension=php_mysqldll
将;去掉改为
extension=php_mysqldll
找到
;sessionsave_path = "/tmp"
将;去掉 设置你保存session的目录,如
sessionsave_path = "D:/php/session_temp";
重启apache服务
在Web根目录下(如 D:\website)建立testdbphp文件内容如下:
<php
$link=mysql_connect(localhost,root,123456);
if(!$link) echo "fail";
else echo "success";
mysql_close();
>
用浏览器打http://localhost/testdbphp ;如果输出success就OK了
四、phpmyadmin的安装配置
将phpMyAdmin-257zip解压到WEB根目录中去,重命名文件夹为phpmyadmin或其它
打开phpmyadmin 目录中的 configincphp
找到
$cfg[Servers][$i][user] = root;
$cfg[Servers][$i][password] = 123456;
分别填上你mysql的用户和密码即可
如不是本地使用,最好加上验证
不知道写得对不对!不过我基本上就是这样配的! 对于学习来讲应该差不多了吧
下面是我成功地配置Nginx+PHP5FastCGI的过程首先安装或编译Nginx安装Nginx源码包可以在官方主页上下载。Ubuntu710可以直接通过apt安装,也可以从这里下载最新的deb包:sudoapt-getinstallnginx如果要自己编译的话,需要确保自己已经有编译器和PCRE的库(用于Nginx的rewrite模块,如果不需要这个模块可以在configure时使用/configure–without-rewrite),编译方法如下:wgettarzxvfnginx-0534targzcdnginx-0534/configure#默认配置安装路径为/usr/local/nginx可以追加--prefix=/usr设置到/usrmake&&makeinstall#install要求有root权限Ubuntu安装之后的文件结构大致为:所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下程序文件在/usr/sbin/nginx日志放在了/var/log/nginx中并已经在/etc/initd/下创建了启动脚本nginx默认的虚拟主机的目录设置在了/var/www/nginx-default而自己利用默认配置编译的,则放在/usr/local/nginx下,以下是目录结构:/usr/local/nginx/conf配置目录/usr/local/nginx/html默认的网站根目录/usr/local/nginx/logs日志和pid文件目录/usr/local/nginx/sbin执行文件目录下面可以启动nginx来看看效果(请确保80端口没有其他服务在使用):Ubuntu请运行:sudo/etc/initd/nginxstart其他请运行:/usr/local/nginx/sbin/nginx然后就可以通过;location~php${include/usr/local/nginx/conf/fastcgi_params;#请根据自己保存的路径进行设置fastcgi_indexindexphp;fastcgi_pass127001:9000;#请根据自己的FastCGI绑定的地址和端口进行配置}}通知Nginx重新载入配置:kill-HUP`cat/usr/local/nginx/logs/nginxpid`Ubuntu用户可以使用init脚本:sudo/etc/initd/nginxreload然后启动php-cgi-b127001:9000假设你在文档根目录放了indexphp,并包含”phpinfo();”的内容,现在再看rclocal文件底部,这样系统启动的时候也可以同时启动PHP的FastCGI进程。
0条评论