Javascript的兴起是否意味着LAMP的终结?
Metamarket的CTO Mike Driscoll最近发表了一篇略带煽动性的帖子,讨论了Web应用的架构。他认为Node.js等框架预示着LAMP的终结。
三个月前,我们决定废弃仪表盘选用的框架:Python的Django,并用Node.js(服务器端的Javascript)重新构建了框架。鉴于LAMP堆栈已经死亡,我们才做出了这个决定。
Mike认为Web有三个阶段:
- 1991-1999:HTML时代——这是个文档的时代。
- 2000-2009:LAMP时代——使用数据库的时代。
- 2010-??:Javascript时代。Javascript时代是事件流的时代。
现代的Web页面已经不再是页面了,它们都是事件驱动的应用,信息会通过这些应用流转。
他解释道:
LAMP架构已经死了,因为对于响应里的Mashup,很少有应用愿意把全部的有效负载转移到很小的事件上去;他们只想用Javascript更新DOM的一个片段。AJAX做到了这一点,但如果服务器端的LAMP模板有10%的HTML和90%的Javascript,这么做显然是不对的……
Mike认为,服务器的主要作用就是带着数据(JSON)把应用发送到客户端(Javascript),并让客户端从中构造UI。服务器的次要作用则是监听处理事件的流,并有效地把响应推回客户端,这些事件可能是一次新的编辑、一条消息、或是Ticker发生了变化。
一些人对此发表了评论:
Bruce Atherton赞成Mike的观点,但他认为事件并不会通过HTTP来流转:
Websockets和SPDY将会接管这方面的处理,因为和HTTP相比,它们更合适这个任务。
Chase Sechrist已经在很多地方使用了Node.js,即便如此,他仍然列举了一些对Node.js的担忧:
你还需要知道一些高级知识,比如竞态条件的调试方法、事件循环的工作原理,甚至在递归回调导致栈溢出时,调用堆栈的处理方式。正因为如此,对那些写了二十年C的人、还有刚开始编程的初级工程师来说,控制流还是非常奇怪、令人费解的。
“Jorjun”指出,以现在的变化速度来看,即使Javascript这个新的架构是合理的,它也不会太持久:
两年之内会有一种更高效的方式对宝贵的IP进行编码。需要注意的是,新的方式正在出现,Java对它们没有任何意义——这些方式在九十年代末还没有出现。Javascript的愚蠢名副其实。它有大括号、奇怪的Fudgery、极其恼人的Artefact,对我这样的老学究来说,Javascript看起来轻率、讨厌、太复杂而容易混淆。
NOLOH的联合创始人Asher Snyder认同帖子的前提条件:“Web应该、也正在转向事件。”但并不相信Javascript能引领方向。他认为“我们正在走向一个平台或统一语言的时代,因为只有平台或统一语言才能让快速开发真正处理好Web的疯狂”。
Subbu Allamaraju最近发布了Node.js和Play的一些性能对比数据,InfoQ和他简单讨论了一下:
就个人而言,我发现Node.js和Play等框架让Web开发人员觉得很兴奋,因为它们带来了一些新的思想。在Web框架领域,特别是在Java端,这样的简单性已经很久违了。尤其是Play,它在Netty之上,而不是传统的Servlet框架,是一个很不错的选择。
Web应用架构的演进确实很快。由于Web应用变得越来越“厚重”,特别是在事件驱动的世界里,人们只能思考REST还剩下什么,看来我们要回到最初开始的地方了。最近我们确实没怎么听说有关REST及其统一接口的消息,还有它怎样成功改变Web应用架构的相关内容。你对Web应用架构的未来持什么观点呢?你怎么看Javascript成为主流的编程语言?
By admin
read more2011数据库技术大会演讲PPT下载(pdf版)
关于大会的更多精彩照片,请点击以下链接。(更新2011.4.16) 2011数据库技术大会现场图片,能找到你自己不? http://bbs.chinaunix.net/thread-2305667-1-1.html
2011数据库技术大会胜利结束了,非常感谢大家积极的参与支持。 这次大会DBA相关的技术工程师达到了近700人,加上庞大的出版社、赞助商等参与者,大会总人数接近800人。会上再次汇集了国内各个领域的数据库技术工程师。 这已经是第二届数据库技术大会了,如果算上下半年的架构师大会,就可以算作第4届由我们组织的技术大会了。经过这两年的发展,突然发现:DTCC、SACC真的成为了一个品牌。 在第一届数据库技术大会中,有来自各个行业的技术工程师,例如,银行、证券、保险、电信、医疗、教育、制造业、物流、互联网等行业,不过,在这些行业中,互联网企业的占比较大。今年,这个行业比较有了一定的变化,那就是:教育、制造业、医疗、银行等行业的参与者的比重有明显的增加。
职业比例的问题 数据库技术大会从名字上看,定位的人群就是DBA。另一方面,在一个企业中,纯DBA在企业的技术工程师中,占比不超过1/5。表面看起来,这次大会受众是一个窄众体。 然而,与数据库相关的应用开发工程师、运维工程师,都纷纷报名参加了本次大会,事实再次证明,数据库与企业的技术开发、系统运维都密切相关,而数据库也是企业技术体系的一个核心,大家都会去关注。
关于技术方向问题 “微博”无疑是当前最热的技术点,新浪杨海潮为我们带来的“新浪微博:基于MySQL的分布式数据库实践”的话题,也受到了大家的一致关注。而淘宝丁原为我们准备的“海量数据快速迁移”也实属众人都关心的话题。 在本次大会中,商业智能专场原只安排了170个座位,然而,阿里巴巴姜迅带来的“海量数据分析平台”、段云峰博士带来的“国内电信领域数据仓库系统建设与应用实践” 等商业智能话题,却吸引了大量的听众。现场中,会场两侧和后面站满了人,超过了250人听会。 这让我们始料未及(会场座位安排不足),同第一届数据库大会的商业智能专场相比,参与人数的比重超过了一倍。从这个统计数字看,商业智能确实是当前大家都一致关注的领域。商业智能的需求,简值可以用井喷来形容。
我们组织的数据库技术大会不是一个固化的学术研讨活动,而是大家的应用实践分享舞台,所以,再次欢迎大家加盟到数据库大会演讲专家团队中来。 在以后的日子里,我们也会更加紧扣大家的实际需求和时代的发展,推出大家更关注的讨论话题。
—————————————————————————————————————————————————— 同时,按照传统,我们再次发起**“2011数据库技术大会参会记,大家一起说”**的活动: A:参与讨论内容: 1、大会参会的游记、感想见闻,甚至批评建议 2、针对大会的演讲主题的技术评论、讨论 3、你在大会上的拍的照片,也可以贴在里面 4、针对没有参加现场本次大会的网友,也可就大会主题、大会形式提建议。 5、针对今年的2011系统架构师大会,你想探讨什么话题?(跟贴回复)
B:激励措施:(截至时间:2011.5.12) 1、只要跟贴回复以上内容,多少不限,就可奖励积分100分。 2、奖励:2011系统架构师大会 门票10张! 在跟贴回复中,优选出10篇进行激励。2011系统架构师大会实际价值800元,货真价实。当然,如果你不选择门票,我们可以提供一本图书。(图书名单随后公布) 唐川(草上飞2008) 2011.4.18
** 现场大会演讲PPT,欢迎大家下载 **
主场1:数据库高可用架构设计
丁原:海量数据迁移方案.pdf (427.19 KB)
王龙:百度数据库架构演变与设计.pdf (2.44 MB)
基于MySQL的分布式数据库实践_公开.pdf (1.39 MB)
主场2:Oracle应用实践
丁俊:SQL与PLSQL开发实践.pdf (1.79 MB)
盖国强:深入解析Oracle-栓锁竞争与Latch优化实践.pdf (994.72 KB)
李奎阳_更多角度看性能优化_公开 .pdf (2.38 MB)
朱龙春:EBS高级架构和高性能架构1.pdf (2.6 MB)
海量数据库解决方案_郑保卫_en-core(公开).pdf(28.26MB)
主场3:DB2数据库应用实践
侯文平:数据库架构设计与面向DB2的工程实践.pdf (1.35 MB)
王飞鹏:Oracle和DB2的那些事.pdf (1.38 MB)
张茹云:数据治理及审计合规的最佳.pdf (3.79 MB)
主场4:SQL Server数据库应用实践
赵松涛:SQLSERVER探秘.pdf (2.59 MB)
SQLServer2008存储引擎&性能优化(可发布).pdf (1.44 MB)
主场5:MySQL、Psql应用实践
姜承尧:MySQL创新工厂.pdf (317.59 KB)
邵宗文:数据库托管平台介绍.pdf (3.37 MB)
杨涛:MySQL 的开源DW 解决方案.pdf (981.28 KB)
Digoal.Zhou – PostgreSQL Inside——公开.ppsx (990.49 KB)
By admin
read more4.1 静态方法和属性-深入PHP面向对象.模式与实践
摘自: 深入PHP面向对象.模式与实践 第四章 高级特性 4.1 静态方法和属性 第2章的所有例子使用的都是对象.我们把类当作生成对象的模板,把对象作为活动组件,对象的方法可以被调用,对象的属性可以被访问.之前的例子也暗示了,面向对象编程中的实际操都是通过类的实例(而不是类本身)完成的.毕竟类仅仅是对象的模板.
事实并非如此简单.我们不仅可以通过对象访问方法和属性,还可以通过类来访问它们.这样的方法和属性属性是”静态的”(static),必须用static关键字来声明.
class StaticExample{ static public $sNum = 0; static public function sayHello) { print “hello”; } }
========================================== 注解:static关键字是在php5中引入的,在php4程序中不能使用.
静态方法是以类作为作用域的函数.静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性.如果修改了一个静态属性,那么这个类的所有实例都能访问到这个新值.
因为是通过类而不是实例来访问静态元素,所以访问静态元素时不需要引用对象的变量,而是使用::(两个冒号)来连接类名和属性或类名和方法.
print StaticExample::$aNum; StaticExample::sayHello();
在第3章中,我们已经熟悉了这个语法.我们曾使用::和parent来访问覆写的方法.现在和之前一样,只不过访问的是类而不是对象数据.一个子类可以使用parent关键字来访问父类,而不使用其类名.要从当前类(不是子类)中访问静态方法和属性,可以使用self关键字.self指向当前类,就像伪变量 $this指向当前对象一样.因此,在StaticExample类的外部可以使用其类名访问属性$aNum属性:
StaticExample::$aNum;
而在StaticExample类内部,可以使用self关键字:
class StaticExample { static public $aNum = 0; static public function sayHello() { self::$aNum++; printf “hello(” . self::$aNum . “)n”; } }
根据定义,我们不能在对象中调用静态方法,因此不能在静态方法中使用伪变量$this.
那么,我们为什么要使用静态方法或属性呢?
因为静态元素有很多有用的特性. 1.首先,它们在代码中的任何地方都可用(前提假设你可以访问该类).也就是说,你不需要在对象间传递类的实例,也不需要将实例存放在全局变量中,就可以访问类中的方法. 2.其次,类的每个实例都可以访问类中定义的静态属性,所以你可以利用静态属性来设置值,该值可以被类的所有对象使用. 3.最后,不需要实例对象就能访问静态属性或方法,这样我们就不用为了获取一个简单的功能而实例化对象.
相关文章:
By admin
read more自定义jquery validate 插件的默认提示语
法一:
一、默认校验规则 (1)required:true 必输字段 (2)remote:”check.php” 使用ajax方法调用check.php验证输入值 (3)email:true 必须输入正确格式的电子邮件 (4)url:true 必须输入正确格式的网址 (5)date:true 必须输入正确格式的日期 (6)dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性 (7)number:true 必须输入合法的数字(负数,小数) (8)digits:true 必须输入整数 (9)creditcard: 必须输入合法的信用卡号 (10)equalTo:”#field” 输入值必须和#field相同 (11)accept: 输入拥有合法后缀名的字符串(上传文件的后缀) (12)maxlength:5 输入长度最多是5的字符串(汉字算一个字符) (13)minlength:10 输入长度最小是10的字符串(汉字算一个字符) (14)rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串”)(汉字算一个字符) (15)range:[5,10] 输入值必须介于 5 和 10 之间 (16)max:5 输入值不能大于5 (17)min:10 输入值不能小于10
二、默认的提示 messages: { required: “This field is required.”, remote: “Please fix this field.”, email: “Please enter a valid email address.”, url: “Please enter a valid URL.”, date: “Please enter a valid date.”, dateISO: “Please enter a valid date (ISO).”, dateDE: “Bitte geben Sie ein g眉ltiges Datum ein.”, number: “Please enter a valid number.”, numberDE: “Bitte geben Sie eine Nummer ein.”, digits: “Please enter only digits”, creditcard: “Please enter a valid credit card number.”, equalTo: “Please enter the same value again.”, accept: “Please enter a value with a valid extension.”, maxlength: $.validator.format(“Please enter no more than {0} characters.”), minlength: $.validator.format(“Please enter at least {0} characters.”), rangelength: $.validator.format(“Please enter a value between {0} and {1} characters long.”), range: $.validator.format(“Please enter a value between {0} and {1}.”), max: $.validator.format(“Please enter a value less than or equal to {0}.”), min: $.validator.format(“Please enter a value greater than or equal to {0}.”) }, 如需要修改,可在js代码中加入: jQuery.extend(jQuery.validator.messages, { required: “必选字段”, remote: “请修正该字段”, email: “请输入正确格式的电子邮件”, url: “请输入合法的网址”, date: “请输入合法的日期”, dateISO: “请输入合法的日期 (ISO).”, number: “请输入合法的数字”, digits: “只能输入整数”, creditcard: “请输入合法的信用卡号”, equalTo: “请再次输入相同的值”, accept: “请输入拥有合法后缀名的字符串”, maxlength: jQuery.validator.format(“请输入一个长度最多是 {0} 的字符串”), minlength: jQuery.validator.format(“请输入一个长度最少是 {0} 的字符串”), rangelength: jQuery.validator.format(“请输入一个长度介于 {0} 和 {1} 之间的字符串”), range: jQuery.validator.format(“请输入一个介于 {0} 和 {1} 之间的值”), max: jQuery.validator.format(“请输入一个最大为 {0} 的值”), min: jQuery.validator.format(“请输入一个最小为 {0} 的值”) }); 推荐做法,将此文件放入messages_cn.js中,在页面中引入
By admin
read morejquery Form 验证 validate插件使用
不过我们还要在需要验证的INPUT里面class加入required说明是必填项,其他的就是验证相关数据比如email就是验证email的数据结构
以下列出validate自带的默认验证
required: “必选字段”,
remote: check.php “使用ajax方法调用check.php验证输入值段”,
email: “请输入正确格式的电子邮件”,
url: “请输入合法的网址”,
date: “请输入合法的日期”,
dateISO: “请输入合法的日期 (ISO).”,
number: “请输入合法的数字”,
digits: “只能输入整数”,
creditcard: “请输入合法的信用卡号”,
equalTo: “请再次输入相同的值”,
accept: “请输入拥有合法后缀名的字符串”,
maxlength: jQuery.format(“请输入一个长度最多是 {0} 的字符串”),
minlength: jQuery.format(“请输入一个长度最少是 {0} 的字符串”),
rangelength: jQuery.format(“请输入一个长度介于 {0} 和 {1} 之间的字符串”),
range: jQuery.format(“请输入一个介于 {0} 和 {1} 之间的值”),
max: jQuery.format(“请输入一个最大为 {0} 的值”),
min: jQuery.format(“请输入一个最小为 {0} 的值”)
对于如何修改插件的默认提示语方法请参考:
http://blog.haohtml.com/archives/9342 validate ()的可选项
**debug:**进行调试模式
$(“.selector”).validate({ debug: true})
把调试设置为默认
$.validator.setDefaults({
debug: true
})
**submitHandler:**用其他方式替代默认的SUBMIT,比如用AJAX的方式提交
By admin
read moreipfw:getsockopt(IP_FW_GET):Protocol not available
本想通过防火墙限制一下,谁知输入出现下面的错误:
[root@Aaronwang ~]# ipfw show
ipfw: getsockopt(IP_FW_GET): Protocol not available
看来是我在编译内核的时候没有把IPFW编译进来,如果确信编译过了,那一定是没有reboot的问题了,我就是当时忘记reboot,才出现这个问题的.看来又要再编译一次内核了!上次内核编译是00:59:01,这次又是在半夜,看来我还真是个夜猫子!呵呵!
[root@Aaronwang ~]# uname -a
FreeBSD Aaronwang 7.2-RELEASE-p6 FreeBSD 7.2-RELEASE-p6 #5: Thu Jan 14 00:59:01 CST 2010 root@Aaron wang:/usr/obj/usr/src/sys/Aaron.wang i386
编译ipfw要在/root/Aaron.wang里面加入下列内容:
options IPFIREWALL
这个选项将 IPFW 作为内核的一部分来启用。
options IPFIREWALL_VERBOSE
这个选项将启用记录通过 IPFW 的匹配了包含 ‘log’ 关键字规则的每一个包的功能。
options IPFIREWALL_VERBOSE_LIMIT=5
以每项的方式, 限制通过 syslogd记录的包的个数。 如果在比较恶劣的环境下记录防火墙的活动可能会需要这个选项。它能够避免潜在的针对 syslog 的洪水式拒绝服务攻击。
options IPFIREWALL_DEFAULT_TO_ACCEPT
这个选项默认地允许所有的包通过防火墙, 如果您是第一次配置防火墙,使用这个选项将是一个不错的主意。
options IPDIVERT
这一选项启用 NAT 功能。
在/etc/rc.conf里面启用firewall。
firewall_enable=”YES” # 激活firewall防火墙
firewall_script=”/etc/rc.firewall” # firewall防火墙的默认脚本
By admin
read moreFreeBSD IPFW 防火墙的安装和设置
IPFW本身是FreeBSD内置的,要使用IPFW设置防火墙需要重新编译FreeBSD内核。注意,因为在编译后IPFW默认拒绝所有网络服务,包括对系统本身都会拒绝,所以在配置过程中一定要小心谨慎。
内核编译方法请参考:Step 1,对IPFW的一些基本参数进行配置:
#cd /sys/i386/conf//如果没有这个目录,说明你的系统没有安装Ports服务,要记得装上。
#cp GENERIC ./kernel_IPFW用 vi 打开kernel_IPFW文件,在文件未尾加入以下个行:
options IPFIREWALL//将包过滤部分代码编译进内核。
options IPFIREWALL_VERBOSE//启用通过Syslogd记录日志;如果没有指定这个选项,即使你在过滤规则中指定了记录包,也不会真的记录它们。
options IPFIREWALL_VERBOSE_LIMIT=10
//限制通过Syslogd记录的每项包规则的记录条数。如果你受到了大量的攻击,想记录防火墙的活动,但又不想由于Syslog洪水一般的记录将你淹没,那么这个选项将会很有用。当使用了这条规则,当规则链中的某一项达到限制数值时,它所对应的日志将不再记录下来。
options IPFIREWALL_DEFAULT_TO_ACCEPT //注意,关键地方了,本句把默认的规则动作从“deny”改成“allow”了,作用是在默认状态下IPFW将会接受任何的数据。输入完成后,保存,并退出。 Step 2,编译系统内核:
#/usr/sbin/config kernel_IPFW
#cd ../compile/kernel_IPFW
//注意,FreeBSD 4.X版本是../../compile/kernel_IPFW,而FreeBSD 5.X版本却是../compile/kernel_IPFW。
#make**#make install**//开始编译内核。Step 3, 编辑 /etc/rc.conf 加入如下参数:
firewall_enable=“YES“ //激活Firewall防火墙
firewall_script=“/etc/ipfw.conf“
//Firewall防火墙的默认脚本
firewall_type=“open“ //Firewall 自定义脚本
firewall_quiet=“NO“ //启用脚本时是否显示规则信息;假如你不再修改防火墙脚本,那么可以把这里设成“YES“。
**firewall_logging_enable=“YES“**编辑 /etc/syslog.conf 文件,在文件最后加入:
!ipfw***.* /var/log/ipfw.log**//这行的作用是将IPFW的日志写到/var/log/ipfw.log/文件里。你可以为日志文件指定其它路径。最后,重启服务器。 重启之后,你就可以用SSH登录你的服务器了,之后你可以在/ etc/ipfw.conf 中添加过滤规则来防止入侵了。#options IPFIREWALL_DEFAULT_TO_ACCEPT(编译内核)这样的设置,防火墙会处于全封闭状态,需要自定义打开端口来实现功能。# ee /etc/ipfw.conf
增加下面内容:
#!/bin/sh
DNS服务器与客户端的通讯端口都是udp的53号端口,因此我们只有开放自己与DNS服务器之间的53号端口进行通信即可,如果你知道自己的DNS服务器的ip地址可以把下面的any改成你的DNS地址。
# DNS ipfw add allow udp from me to any 53 out ipfw add allow udp from any 53 to me in
By admin
read morenginx下关于PHP-FPM在高负载下的优化配置
今天调整了服务器的PHP-FPM配置,其中有几个参数可以在网站在高并发下,保持服务器的稳定.不会挂掉.请看下面的内容.
代码:
<value name="max_children">5</value>
Settings group for 'apache-like' pm style
<value name="apache_like">
Sets the number of server processes created on startup.
Used only when 'apache-like' pm_style is selected
<value name="StartServers">20</value>
Sets the desired minimum number of idle server processes.
Used only when 'apache-like' pm_style is selected
<value name="MinSpareServers">5</value>
Sets the desired maximum number of idle server processes.
Used only when 'apache-like' pm_style is selected
<value name="MaxSpareServers">35</value>
<value name="rlimit_files">65535</value>
<value name="max_requests">1024</value>
When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to you : )如果您高负载网站使用PHP-FPM管理FastCGI,这些技巧也许对您有 用:)1. Compile PHP’s modules as less as possible, the simple the best (fast);1.尽量少安装PHP模块,最简单是最好(快)的2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);2.把您的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以注:我的1g测试机,开64个是最好的,建议使用压力测试获取最佳值3. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;3.使用socket连接FastCGI,linux操作系统可以放在 /dev/shm中注:在php-fpm.cnf里设置/tmp/nginx.socket就可以通过socket连接 FastCGI了,/dev/shm是内存文件系统,放在内存中肯定会快了4. Increase Linux “max open files”, using the following command (must be root):
By admin
read more如何安装cacti监控nginx插件
Scripts and templates for nginx.
Nginx –
Provide graphing nginx clients statistics (active, reading, writing, waiting) and nginx socket statistics (accepts, handled, requests). It’s a formal devision used only for graphs usability.
For use do next steps:
Enable nginx http_stub_status_module at configure stage (if requared).
Enable stub status. Add to nginx.conf (in any server context):
location /nginx_status {
stub_status on;
disable access_log if requared
access_log off;
#allow XX.YY.AA.ZZ;
#allow YY.ZZ.JJ.CC;
By admin
read morenginx php-fpm性能优化设置
When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to you : ) 如果您高负载网站使用PHP-FPM管 理FastCGI,这些技巧也许对您有用:)
- Compile PHP’s modules as less as possible, the simple the best (fast); 1.尽量少安装PHP模块,最简单是最好(快)的
- Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server); 2.把您的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以
注:我的1g测试机,开64个是最好的,建议使用压力测试获取最佳值
Using SOCKET PHP FastCGI, and put into /dev/shm on Linux; 3.使用socket连接FastCGI,linux操作系统可以放在 /dev/shm中注: 在php-fpm.cnf 里设置/tmp/nginx.socket就可以通过socket连接 FastCGI了,/dev/shm是内存文件系统,放在内存中肯定会快了
By admin
read morecacti 监控nginx 出现 no (LWP::UserAgent not found)的解决办法
在上一篇« 如何安装cacti监控nginx的插件 »文章里我们介绍了如何安装,但在最后发现执行
get_nginx_clients_status.pl http://nginx.server.tld/nginx_status
的时候,提示 no (LWP::UserAgent not found) 错误的原因是该系统 perl 缺少了相关组建,解决办法:
[shell]yum -y install perl-libwww-perl[/shell]
如果还不行,再按下面的方法解决:
[shell]#perl -MCPAN -e shell 一直回车,知道出现cpan&gt; 提示符开始。
cpan> install LWP::UserAgent
cpan> exit
[/shell]
如果perl相关组件安装成功,就能正常显示了。
[root@localhost scripts]# ./get_nginx_clients_status.pl nginx_active:149 nginx_reading:6 nginx_writing:137 nginx_waiting:6
By admin
read more[教程]Centos 5.5 快速安装cacti
一、准备工作
环境:Centos 5.4 x86_64 所需软件:
http Php Php-mysql Php-snmp Mysql Perl-DBD-MySQL Php-pdo rrdtool Net-snmp Net-snmp-libs Net-snmp-utils
#下载相关软件
cd /usr/local/src/
二、环境介绍 主监控机是Centos 5.4 x86_64 主监控机IP=10.0.0.52
三、安装配置 (1)在主监控机上安装apache+php+gd的web环境,推荐编译安装,不再赘述,本处方便起见用yum装了
yum install php php-mysql php-snmp mysql mysql-server net-snmp net-snmp-libs net-snmp-utils php-pdo perl-DBD-MySQL
(2)在主监控机上安装rrdtool,rrdtool依赖的包过多,所以选择增加源,然后用yum安装 #增加源
vi /etc/yum.repos.d/CentOS-Base.repo
#在文件末尾增加以下部分
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
enabled=1
yum install rrdtool
(3)配置snmp vi /etc/snmp/snmpd.conf #将下边这行中的default
By admin
read more20个Nginx Web服务器最佳安全实践
Nginx是一个轻量级,高性能的Web服务器/反向代理和电子邮件代理(IMAP/POP3),它可以运行在UNIX,GNU/Linux,BSD变种,MAC OS X,Solaris和Microsoft Windows上。根据Netcraft的调查数据显示,互联网上6%的域名都使用了Nginx Web服务器。Nginx是解决C10K问题的服务器之一,与传统服务器不一样,Nginx不依赖于线程处理请求,相反,它使用了一个更具扩展性的事件驱动(异步)架构。Nginx在很多高流量网站上得到了应用,如WordPress,Hulu,Github和SourceForge。
本文的主要目是介绍如何提高运行在Linux或UNIX类操作系统上的Nginx Web服务器的安全性。
Nginx默认配置文件和默认端口
◆ /usr/local/nginx/conf/ – Nginx服务器配置目录,/usr/local/nginx/conf/nginx.conf 是主配置文件
◆ /usr/local/nginx/html/ – 默认文档位置
◆ /usr/local/nginx/logs/ – 默认日志文件位置
◆ Nginx HTTP默认端口:TCP 80
◆ Nginx HTTPS默认端口:TCP 443
可以使用下面的命令测试Nginx的配置是否正确:
# /usr/local/nginx/sbin/nginx –t
输出示例:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is okconfiguration file /usr/local/nginx/conf/nginx.conf test is successful
要让修改后的配置生效,执行下面的命令:
# /usr/local/nginx/sbin/nginx -s reload
如果要停止服务器,运行:
# /usr/local/nginx/sbin/nginx -s stop
1、开启SELinux
SELinux(安全增强的Linux)是一个Linux内核功能,它提供了一个机制支持访问控制安全策略,提供了巨大的安全保护能力,它可以防止大多数系统root级攻击,请参考“如何在CentOS/Red Hat系统上开启SELinux”(http://www.cyberciti.biz/faq/rhel-fedora-redhat-selinux-protection/)。
运行 getsebool –a 命令查看SELinux设置项:
getsebool -a | lessgetsebool -a | grep offgetsebool -a | grep o
By admin
read morePHP.INI配置:Session配置详细说明教程
网上有很多PHP.INI文件配置的中文说明,但是对于PHP初学者来说在进行PHP运行环境搭建配置时还是容易一头雾水,今天换一种角度来分享如何进行php.ini配置,以求达到解决实际问题的效果,开篇以PHP教程方式详细介绍如何通过php.ini来配置Session,以实现基本的Session应用。
我们知道在利用PHP进行购物车、用户登录等交互式网站开发时,Session是一种很好的解决方法,如果采用XAMPP,AppServ等PHP安装包,一般情况下,PHP Session设置系统都会配置如果采用手动配置PHP运行环境,就需要我们通过php.ini来对Session进行配置,下面详细介绍如何进行Session配置。
PHP运行环境说明
我采用的是DedeAMPZ,PHP版本5.2.4,如果你是手动安装PHP运行环境,你需要将php.ini-dist或者php.ini-recommended重命名为php.ini,并将其复制在windows目录下。
php.ini中的session配置说明
下面介绍能让session运行的必要配置步骤
手动配置PHP运行环境时,最容易遗忘的一项是服务器端session文件的存储目录配置工作,打开php.ini文件,搜索Session,找到session.save_path,默认值为/tmp,代表session文件保存在c:/tmp目录下,默认tmp目录并没有创建,你可以在c盘下创建tmp目录,或者创建一个其他目录,比如leapsoulcn,再修改session.save_path的值,并去掉;,即
session.save_path = ‘/leapsoulcn’;
注意事项:
1、一般为了保证服务器的安全,session.save_path值最好设置为外网无法访问的目录,另外如果你是在linux服务器下进行session配置,请务必同时配置此目录为可读写权限,否则在执行session操作时会报错。
2、在使用session变量时,为了保证服务器的安全性,最好将register_globals设置为off,以保证全局变量不混淆,在使用session_register()注册session变量时,你可以通过系统全局变量$_SESSION来访问,比如你注册了leapsoulcn变量,你可以通过$_SESSION[‘leapsoulcn’]来访问此变量。 PHP环境变量$_SERVER和系统常量详细说明
session.save_path配置其他说明事项,从php.ini配置文件翻译而来
你可以使用”N;[MODE;]/path”这样模式定义该路径,N是一个整数,表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。
[MODE;]可选,必须使用8进制数,默认600(=384),表示每个目录下最多保存的会话文件数量。[MODE;]并不会改写进程的umask。php不会自动创建这些文件夹结构。可使用ext/session目录下的mod_files.sh脚本创建。如果该文件夹可以被不安全的用户访问(比如默认的”/tmp”),那么将会带来安全漏洞。当N>0时自动垃圾回收将会失效,具体参见下面有关垃圾搜集的部分。
如果你服务器上有多个虚拟主机,建议针对每个不同的虚拟主机分别设置各自不同的目录。
至此最基本的session配置就完成了,你只要保存php.ini,并重启apache,即可使用session功能。
其他session配置说明
session.save_handler = ”files”
默认以文件方式存取session数据,如果想要使用自定义的处理器来存取session数据,比如数据库,用”user”。
session.use_cookies = 1
是否使用cookies在客户端保存会话sessionid,默认为采用cookies
session.use_only_cookies = 0
是否仅仅使用cookie在客户端保存会话sessionid,这个选项可以使管理员禁止用户通过URL来传递id,默认为0,如果禁用的话,客户端如果禁用Cookie将使session无法工作。
session.name = “PHPSESSID”
当做cookie name来使用的session标识名
session.auto_start = 0
是否自动启动session,默认不启动,我们知道在使用session功能时,我们基本上在每个php脚本头部都会通过session_start()函数来启动session,如果你启动这个选项,则在每个脚本头部都会自动启动session,不需要每个脚本头部都以session_start()函数启动session,推荐关闭这个选项,采用默认值。
session.cookie_lifetime = 0
传递sessionid的Cookie有效期(秒),0表示仅在浏览器打开期间有效。
session.gc_probability = 1
session.gc_divisor = 100
定义在每次初始化会话时,启动垃圾回收程序的概率。计算公式如下:session.gc_probability/session.gc_divisor,比如1/100,表示有1%的概率启动启动垃圾回收程序,对会话页面访问越频繁,概率就应当越小。建议值为1/1000~5000。
session.gc_maxlifetime = 1440
设定保存的session文件生存期,超过此参数设定秒数后,保存的数据将被视为’垃圾’并由垃圾回收程序清理。判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。如果多个脚本共享同一个session.save_path目录但session.gc_maxlifetime不同,将以所有session.gc_maxlifetime指令中的最小值为准。
如果你在session.save_path选项中设定使用子目录来存储session数据文件,垃圾回收程序不会自动启动,你必须使用自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集。
比如设置”session.gc_maxlifetime=1440″ (24分钟):
cd /path/to/sessions; find -cmin +24 | xargs rm
以上是一些常用的session配置选项说明,更多的session配置选项说明你可以参考php.ini文件中的说明。
至此,在php.ini配置文件中对session进行配置的PHP教程就介绍完毕了,通过上面的步骤实践与学习,基本的session功能都可以使用,至于session性能等其他方面则需要根据服务器环境和需求进行微调了,这个得自己体会。
注:PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。
By admin
read more