以前用WordPress博客,展示速度慢,问题重重,不方便优化,也懒得优化,故重构本博客代码。
前端采用HTML5+CSS3展示,后端使用ThinkPHP开发,页面顶部和背景使用天气一点通(http://www.tqydt.com)的天气插件,实时显示当前IP所在位置的天气,也算是增加一点小乐趣吧。
顺便启用了www.151051.cn域名,以后不再使用www.151051.com了。
以前用WordPress博客,展示速度慢,问题重重,不方便优化,也懒得优化,故重构本博客代码。
前端采用HTML5+CSS3展示,后端使用ThinkPHP开发,页面顶部和背景使用天气一点通(http://www.tqydt.com)的天气插件,实时显示当前IP所在位置的天气,也算是增加一点小乐趣吧。
顺便启用了www.151051.cn域名,以后不再使用www.151051.com了。
转:http://lusongsong.com/reed/398.html
我觉得HTML5的兴起完全是因为iPhone和iPad,自从Adobe停止开发flash、Android4.0不支持flash后,我觉得在不久的将来HTML5会广泛应用,而且HTML4已经10年没更新了。
HTML5与HTML4代码结构对比
HTML5很多功能已经被介绍过了,比如在图片中可以直接写标题(不是alt哦),更精简的代码,直接用HTML5播放音频、视频,HTML5新增了不少内联元素,这为黑帽SEO节约了一笔不菲的时间。不过主流浏览器支持的比较少,卢松松在这里就不介绍了。
随着HTML5的到来传统的<div id="header">和<div id="footer">无处不在的代码方法现在即将变成自己的标签如<Header>和<footer>,下面以一张图来表达更为清楚:
css写法" data-original="/app/get_remote_pic.php?file=http://lusongsong.com/upload/398-2.jpg" alt="HTML4的div+css写法" />
(传统的div+css写法)
css写法" data-original="/app/get_remote_pic.php?file=http://lusongsong.com/upload/398-3.jpg" alt="HTML4的写法" />
(HTML5的写法)
可以看看出HTML5的代码可读性更高了,也更简洁了,内容的组织相同,但每个元素有一个明确的清晰的定义,不再被迫去猜测之间不同命名的<div>标记,搜索引擎可以更容易地衡量你网页上的内容和相关内容。
值得介绍的一些标签
虽然我们看到了HTML5的简洁和强大之处,但据我所知,很多人制作html页面的时候不会按照语义来书写代码。边栏(aside)会写成sidebar,如果是这样的话,会使网页更加混乱,最终导致搜索引擎不好理解。
noscript标签将会被大量使用,因为HTML5时代将会是一个富媒体时代。传统的文字、图片、链接、视频、音频可能已经满足不了用户的需求,大量的脚本能够编辑出丰富的信息,包括游戏、个性化设计等等。
time标签可能会作为一个来判断网页文字源,也就是能够通过time标签来识别哪篇文章是原创的。而time标签可能将是成为HTML5时代SEO们争论不休的一个标签。
video标签中间区域的文字信息将会让搜索引擎读懂视频,这是一次飞跃。
那么搜索引擎会抓取HTML5吗?
这是一篇来自Google站长论坛John Mu的文章,我觉得比较中肯,拿来给大家分享下:
一般来说,我们(Google)的搜索引擎爬虫是不能够百分百地从语法层面去精确地描述或者分析HTML中的标签的,新兴的HTML5也不例外。如果HTML5组织的网站越来越多,并且在实际当中给我们的爬虫抓取信息带来方便与效益的话,我们会尽力将完善我们的算法去迎合HTML5的标签特性。要记住的是,我没有明确地支持你们大家都用HTML5来构建网站,并且我没有明确提出希望大家的网站由于用HTML5来构建而在搜索当中获得很好的对待。HTML5仍然有许多地方需要不断完善,而如果大网站致力于运用HTML5的话将是令人振奋的事。
对于HTML5,我觉得它仍没有得到广泛的推广与应用,因此我们暂时不会将焦点放到它上面,我们不肯定使用HTML5构建的网站比用旧版本的HTML构建的网站在搜索中是否表现出优势。
Google尚未准备好,百度更不用说了。
最终用户优先(Priority of Constituencies)
“In case of conflict, consider users over authors over implementors over specifiers over theoretical purity.”
一旦遇到冲突,最终用户优先,其次是作者,其次是实现者,其次标准制定者,最后才是理论上的完满。
当HTML5提供了一些令用户兴奋的东西,其次产品得到更好的展现,其次我们可以放心地使用它们,其次元素被更谨慎的方式定义,最后搜索引擎也不再淡定了。
写在最后:
我觉得,因为HTML5现在并没有广泛地运用,而且搜索引擎支持效果也不佳,现在用HTML5来写网站并不会给你的网站带来什么好处,但我不否认将尝试用HTML5来编写卢松松博客模板。而HTML5会让搜索引擎读懂图片、视频、富媒体,一个新的时代即将到来,SEOer将会有大量的工作要去处理。
来源:卢松松博客(微信/QQ:13340454),欢迎分享本文,转载请保留出处!
http://www.webkaka.com/blog/archives/how-to-set-gzip-for-js-in-Nginx.html
Nginx启用gzip很简单,只需要设置一下配置文件即可完成,可以参考文章Nginx如何配置Gzip压缩功能。不过,在群里常有人提到,他们的网站Gzip压缩虽然成功了,但检测到JS仍然没有压缩成功,这是为什么呢?经过我的检查发现,原来是他们的gzip_types设置不对造成的,本文就为遇到同样情况的人解决这一问题。
Nginx启用Gzip压缩js无效
某群友在群里提到,他启用了网站的Gzip压缩,通过站长工具Gzip压缩检测检测到启用成功了,想着其他文件如CSS、JS等也都压缩成功了,但是通过进一步检测各种类型的压缩情况,发现JS文件并没有启用Gzip压缩,这令他非常纳闷,不知何故。
图1:Nginx启用Gzip压缩js无效
因为网站服务器是美国的VPS,为什么选用美国的VPS?1、不用备案;2、便宜。
VPS 使用 Centos + Kloxo,Kloxo安装容易,配置简单,可以在Apache和lighttpd之间切换,完全可以满足我的需求。简而言之,好用。
VPS远在大洋彼岸,速度自然快不动啊哪里去,对网站使用了CDN,速度有明显的提升。但是,对网站使用了CDN后,Apache网站日志记录的来源IP就是CDN服务器的IP,这样很不利于追踪分析网站日志。
kloxo 使用Apache的情况下,httpd.conf 位于 /etc/httpd/conf/httpd.conf,打开这个文件,找到LogFormat这行,进行以下修改:
css"> LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
这样修改后,log中的 IP 就可以正常记录了。
PS:针对asp和php程序的修改方法也是类似的,有需要的朋友google一下,再或者百度一下。
其他不再赘述,发挥二的性格,我们直奔主题。
用户打开网站的整个流程中,DNS解析时第一环,当用户输入域名并敲回车后,windows系统调用DNS client,寻找到用户配置或者自动分配的DNS IP,之后就开始整个解析过程。
DNS解析,变快有意义吗?
有,呵呵,很多小型网站,DNS解析时间都接近0.5s,甚至我见过一个网站,需要1.2s才可以解析出结果的。这是个非常令人吃惊的数据,因为对于一般网站打开时间超过8s用户即将放弃访问,而对于电子商务网站,4s就是用户忍耐极限。而一般经过优化的小型网站,DNS解析时间都可以控制在200MS左右,而带宽在100M左右的网站,经过优化,DNS解析时间可以控制在50-100ms。
如何优化呢?
首先利用好TTL,因为要尽量多的让用户直接从运营商的DNS缓存中拿到A记录,这样才能保证最快,但是也要保证,当你的服务器出问题时,需要尽快的切换,所以,这个TTL设置也是有一些情况需要综合研究的。
1、 你肯定清楚,自己的服务器有没有多台或者备份。如无备份,那服务器宕机时,你只能生抗,所以,TTL时间对于你来说是越长越好,因为TTL短的目的是服务器发生问题时,可以及时切换,这个对于没有备份的网站基本利用不上。所以,你的TTL设置就是越长越好,当然了,也不能无限长,一般设置TTL 3600即可。
2、 如有备份或者多台服务器,会发生由于服务器宕机需要及时做切换,TTL时间越短,切换越及时,但是TTL时间越短,也就意味着运营商DNS经常缓存不住,一般用户,设置为TTL 600即可,如果对及时切换,要求特别苛刻的网站,设置TTL 120即可。
其次寻找足够热的域名解析商。很多网站,都是自己做一个域名解析服务器,看着自己掌控方便了,但是大错特错,因为你的域名解析服务器,基本上都不被缓存,每次从根服务器询问一圈,绕了大半个地球,才给出最后的结果,那自然会效果很差。所以,要寻找足够热的域名解析商。什么叫热,就是被访问的次数特别多。足够热的话,域名解析服务器的A记录基本上会被各地运营商的DNS一直缓存着。如何判断域名解析商够不够热呢?其实,也很简单,看看这个域名解析商的客户够不够多,他们客户网站够不够热门,访问的人够不够多。
也给大家推荐一个更好的方法,就是找CDN厂商做域名解析。因为CDN厂商服务的客户,有很多是很热很大用户群很多的,所以,这些CDN厂商的域名解析服务器,服务效果那是岗岗的好。
最后是进阶技巧---巧用CNAME。不少网站拥有者,在同样的一个或多个服务器上运营很多小网站;或者自己运营一个网站,但是拆分了很多个二级域名。针对这些情况,严重需要善用CNAME,把所有的这些小网站的域名或者二级域名,cname到一个自己定义的统一域名。然后设置这个cname对应的TTL时间足够长。这样的话,保证网站的第一次解析,可以直接从运营商的DNS缓存中拿到,也就是直接拿到cname后的记录。然后,第二个cname记录,再设置一个相对合理的TTL值。通过这样,变相加热了第二级域名,通过加热的第二级和缓存时间足够长的第一级,最大化的优化DNS解析时间。该技巧,一定要确保,最后A记录得到的IP,可以服务这些原始域名。
例子:
www.abc.com. 7200 IN CNAME hot.abc.com.
hot.abc.com. 600 IN A 127.0.0.1
什么叫拆分域名?
很多网站,在搭建网站的时候,只是申请和购买了一个域名,然后所有内容:图片、js、css、html、php等等,都放在一个域名下。
而拆分域名,指的就是根据不同的应用,而将域名拆分出来。
拆分域名有什么好处?
使用IE6和IE7内核的浏览器,针对同个域名,只会同时发起2个连接。
使用IE8内核的浏览器,针对同个域名,可以同时发起6个连接。
很重要吗?
非常重要,请看图示。
使用IE6打开一个所有内容均在同个域名下的网站
使用IE8打开一个所有内容均在同个域名下的网站
我们看到的是,在IE6的情况下,请求第7个元素,需要0.7s,而在IE8的情况下,0.277就开始请求第7个元素。
由此可以看到,并发连接更多的时候,网页打开速度会更快。
使用IE6访问情况如下:
域名个数 |
页面大小 |
耗时 |
1个 |
500KB大小的首页 |
7s |
多个 |
540KB大小的首页 |
3.6s |
使用IE8访问情况如下:
域名个数 |
页面大小 |
耗时 |
1个 |
500KB大小的首页 |
4.6s |
多个 |
540KB大小的首页 |
3.1s |
由以上数据可以看到,多个域名,不管是在IE6和IE8的情况下,拆分域名,都会使网站的打开速度变快。
现实中也是如此,新浪、淘宝等大型网站,他们无一不是在拆分域名。
另外,要纠正一个IT人的误区。因为IT人一般都热衷技术,很多人的操作系统等版本都很新,用的都是IE8甚至以上的浏览器。但是整个中国,到目前为止,使用IE6和IE7的用户,仍然非常另IT人震惊的80%左右。所以,拆分域名,基本上可以缩减你20%以上的打开速度。
一个简单的操作,就能带来巨大的效果提升,何乐不为?
当然了,肯定会有人问,拆分域名,那不就会导致域名热度不够,DNS缓存不住的问题吗?这个问题,请看我上一篇博文,已经给出了答案。
按照什么原则拆分域名呢?
个数多少合适?
一般50M以下网页类网站,域名保持在4、5个即可,过多后范围会导致你的维护和使用变得复杂。
100-500M以下网页类网站,域名保持在8-10个左右。
1G以上的网页类网站,域名无所谓个数,保持10个以上,具体个数根据自己的业务和管理特点随心制定。
什么内容放到同个域名下?
页面类:html、htm等
样式类:js、css等
图片类:jpg、png、gif等
动态类:php、asp等
这样的分配方式,将来有利于你进一步优化你的网站,并且在你需要寻找加速工具时,也可以针对性的选择不同的加速方式。
老鸟请直接看开启压缩进阶篇。
菜鸟还是慢慢随着老夫的思路看吧,哇哈哈。
什么是压缩?
大家还记得我们第一次接触winzip软件吗?非常神奇,一个文件,经过winzip压缩后,大小可以压缩成原来的30%左右。记得当年,很多文件,都是压缩后才可以放到自己的软盘中。
而对于网站,也有这样的压缩技术,可以让你的网页中的文本类文件瘦身,在用户完全不知情的情况下,通过gzip和deflate压缩程序有效减少了网页,让用户更快的打开网站。
压缩有多大用处?
通过一个小小的测试软件,我对新浪、网易等门户网站进行了访问。
新浪首页访问情况:
网易首页访问情况:
大家可以明显的看到,网易和新浪的首页,经过压缩后,都缩小了70%以上。
相信大家都知道,当一个网页,减小到30%后,对于最终用户来说,打开网站的效率会提升为原来的3倍。
备注:
该工具地址http://www.gidnetwork.com/tools/gzip-test.php 大家也可以测试下自己的网站压缩后的情况。
用户不支持压缩怎么办?
开启压缩后,会不会由于用户无法访问这种压缩文件,导致用户访问文件失败?
不会,因为Trident、Gecko、Webkit三种内核的浏览器,都在发起请求时,告知服务器,他们支持什么压缩格式,如下图:
而服务器都是按照发起请求中用户支持的压缩格式,进行对应反馈。如果用户发起的请求头中,无Accept-Enconding头,就将返回给用户非压缩格式。
如何开启压缩?
请百度娘之,网上太多教程了,不再赘述。
对哪些内容开启压缩呢?
只需要针对文本类文件的域名开启压缩。图片等,已经都是压缩格式了,再使用压缩,不会减少什么文件大小,反而会导致服务器负载变高,以及会由于这种对图片的不规范压缩使用导致各种各样意想不到的问题。
所以,开启压缩之前,最好先完成域名拆分的工作,具体见如何让网站打开更快第二弹。
技巧点:
开启压缩,建议使用apache服务器。
因为IIS服务器在处理压缩时有个小问题,就是第一次被访问的时候,IIS给出的文件时非压缩的,后续的访问,才直接给出压缩文件。
这个小的bug,其实问题并不大,但是现在很多网站都在用一些缓存服务器或者是CDN,就会导致这个问题被放大,会导致压缩启用并不能完全成功。
而apache是第一次就直接给出压缩后的文件。
当然了,如果你用的是IIS,并且无法替换apache,那就自己麻烦一些,写个脚本,将常用的页面,在开启压缩后,访问2次,可以减少很多问题发生。
开启压缩之进阶篇
当下的中国网络状况
中国网络谁当家,当然是电信和联通两朵花,但是现在越来越看到的现象是百花争艳,除了这两朵花之外,越来越多的涌现小ISP。如移动、电信通、长城、方正、歌华有线、光环新网、甚至南方地区还有些香港过来的小运营商。
这些小运营商都有一个特点,就是会cache文件,他们会为了减少网间结算带宽,而尽量想办法缓存文件,让他们的用户本地访问。
其次,对于很多中大型公司来说,他们也会搭建自己的缓存服务器。
另外,还有很多网站,自身都搭建或者在使用第三方的CDN,也都是缓存服务器。
所以,当下的中国网络情况,基本上就是缓存服务器在提供众多的服务。所以,你的开启压缩,如果不主动配合这些各种各样的缓存服务器,那么你out了,你会发现,你的很多努力,都是笑谈,并无实际作用。
如何适合当下的状况?如何才可以保证用户支持压缩时,网络间传递的就是你想给他的的压缩文件?
那么,请紧记以下要点,并逐个落实。
开启压缩时,需要针对压缩和非压缩文件,都返回Vary:Accept-Encoding头。
这个头部是告诉缓存服务器,要根据用户支持的编码方式提供对应的文件。
该项很重要,很多网站,只是对压缩文件开启该头。在缓存服务器中,如果给出的非压缩的文件不包含该头部,也就是告知缓存服务器,当用户请求时,不需要判断用户支持的编码格式,而直接将该文件传递。所以,最后导致用户请求到缓存服务器时,无论用户支持不支持压缩,都是直接返回非压缩的文件。
开启压缩时,需要同时对HTTP1.1和HTTP1.0均开启压缩。
大家都是认为,HTTP1.0协议的用户,肯定是特别老的用户,肯定是不支持压缩的,所以,很多网站,都是针对HTTP1.0协议提供非压缩文件。
但是,实际中,太多太多的缓存服务器,为了追求最大的兼容性,还在使用HTTP1.0协议。所以,当你只是对HTTP1.1协议开启压缩时,等于抛个媚眼给瞎子看。
例如,新浪的缓存服务器,也是HTTP1.0协议的,但是他们就很聪明的针对HTTP1.0也开启了压缩服务,如下图:
为什么要讲HTTP头?
1、 非常简单的通过HTTP头,可以让你的用户打开速度快10倍
2、 网上讲HTTP头的文章,都讲的太玄乎和专业,实际价值不大
3、 太多人看了太多乱七八糟的文章,加了很多自己也不知道干嘛用的HTTP头
4、 HTTP头过大会阻塞你的用户访问,你考虑过吗?如何让你的HTTP头正好够用,能够起到效果又不要过于臃肿堵塞你的用户,你考虑过吗?
什么是HTTP头?
HTTP协议采用了请求/响应模型。
客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
以上是抄来的,其实我不想讲,呵呵,但是普及下吧。
下面是我们这一篇中主讲的
HTTP响应头的管理
哪些是常用的HTTP响应头?
看图:
总结来看,常用的HTTP头如下:
协议 状态码 | HTTP/1.0 200 OK |
服务器时间 | Date: |
服务器 | Server: |
文件类型 | Content-Type: |
自适应 | Vary: Accept-Econding |
备注:sohu的网站用的Vary后有很多选项,是为了手机访问给对应格式页面的,但是这个方式,哥甚不赞同 | |
最后修改时间 | Last-Modified: |
备注:www.qq.com没有该项,所以,悲剧的qq,当他的用户每次点击刷新时,别的网站都是个发送If-Modify-Since请求,返回304无变化只需要几百字节,而qq的用户则需要直接请求,全新拿文件,从几百字节消耗变成5W多个字节 | |
压缩格式 | Content-Econding: gzip |
备注:了解这个妙用,看俺的第三弹 | |
过期时间 | Expires: |
备注:哥一直认为,这是个非常渣的HTTP头,没想到四大门户都有这个头,啧啧,预计在第五弹我会批判这个 | |
缓存设置 | Cache-Control: max-age= |
经过缓存服务器后的各种头 | Age: X-cache: Via: FSS-cahe: 等等 |
备注:这个再一次说明了,中国的互联网早就是缓存服务器的天下了,具体见第三弹 | |
综合以上的以上,我充满信心的说,以前我和很多人争论过的,Etag头对于99%的网站就是垃圾这件事情,得到了充分证实,这四大门户首页,没有一个用Etag头的。 |
哪些头需要好好管理?
Cache-Control
这是个无比妙用的头,它可以让你的首页,从2MB,变成200KB。
没错,就是它。
我们先看看别人用了它之后,做到了啥。
网站 |
首次打开大小 |
再次打开大小 |
首次请求数 |
再次请求数 |
www.qq.com |
505KB |
45KB |
92 |
18 |
www.sina.com.cn |
1261KB |
800KB |
186 |
94 |
www.sohu.com |
738KB |
296KB |
151 |
61 |
www.163.com |
1784KB |
487KB |
247 |
66 |
减少了这么多,网站和用户双赢,靠的就是这个头。下面我将讲下具体如何用。
Last-Modify
这个头好用,那就用是了,为什么还要单独拿出来说?
是因为这个头,有个小的隐藏风险,见过很多人中标,我指出来,希望更多的人可以看到,之后避免。
很多网站,在更新网站或者发布网站临时维护信息时,会采用将老的文件,剪切到其他目录,然后本地再上传一个同名文件进行文件更新或者网站的页面更新。当更新的页面出问题或者维护结束他们使用正常页面给用户服务,会立刻把老的文件剪切回来,覆盖旧文件。
这就有一个非常大的问题。
因为对于已经访问过网站的人来说,他们已经把文件缓存到了本地。当用户再次访问网站时,会发送一个If-Modify-Since请求。
老文件 Last-Modified: 旧时间
新文件 Last-Modified: 新时间
当你用旧文件替换新文件后,由于新文件的最后修改时间要早于旧文件的,所以,IE不会让用户拿到没有问题的旧文件,而是让他们使用新文件。
所以,如果你使用用旧文件替代新文件,一定要对旧文件做个小的处理,使其更新最后修改时间,不然,用户依然会访问出问题的页面或者是维护页面。
如何用好Cache-Control?
当你不想让用户缓存时,你只需要添加一个头,no-store即可,其他no-cache、must、must-revalidate、proxy-revalidate等都没必要用,因为no-store一般默认为最高级。
其他可以让用户缓存的页面,区分目录,根据不同的目录,配置不同的max-age头。
max-age啥用处?
用户得到HTTP响应头后,会根据本地时间,加上max-age的时间,形成一个过期时间。例如,用户本次时间为11:00,max-age设置为600,那么文件拿到后,过期时间为11:10分。也就是这个用户,在11:10分以前,访问这个文件,就会直接缓存命中,而不会对服务器发出请求。
所以,max-age的运用就可以让你的网站像那四大门户一样,大小减少到原来的10分之一,请求数也会短期内得到巨大的减少。
如何设置Cache-Control?
如何设置百度娘之。
管理上的建议:
你不可能针对每个文件配置Cache-Control,所以,最好是先拆分域名,将不同应用(文件类一个域名,图片类一个域名等等)配置不同的缓存控制头。
如果你的网站属于大中型网站,如网页访问带宽在100M以上的,可能针对域名配置不同缓存控制头,已经不能满足你的需求了,这个时候,就可以管理好你的目录。
将文件根据你们网站特点分到不同目录,然后针对目录,配置不同的缓存控制头。
max-age设置多大?
以下提出的均为建议值,但是最适合你的,是你自己根据网站特点进行的缓存时间配置。
首页,建议为900,也就是15分钟。
文本类文件,建议为10800,也就是3小时。
图片类文件,建议为86400,也就是24小时。
Swf类文件,建议为604800,也就是7天。
flv、exe类文件,建议为31536000,也就是1年。
作者:王康
文章来源:xmw2.blog.chinaunix.net
转:http://hi.baidu.com/%C0%B4%C1%BD%B8%F9%CF%E3%B3%A6/blog/item/a59a610fa26207ed37d12224.html
各文档所在位置
日志文件 /var/log/varnish/varnish.log
可执行程序 /usr/local/varnish/bin
缓冲文件 /var/vcache
配置文件 /usr/local/varnish/vcl.conf
启动参数 /etc/sysconfig/varnish
启动脚本 /etc/rc.d/init.d/varnish
/etc/rc.d/init.d/varnishlog
创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):
/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /var/vcache
chmod +w /var/vcache
chown -R www:www /var/vcache
创建日志文件,并授予www用户权限访问
mkdir -p /var/log/varnish
chmod +w /var/log/varnish
chown -R www:www /var/log/varnish
可能需要安装如下包
[CENTOS]yum install ncurses-devel
[UBUNTU]apt-get install libncurses5-dev
编译安装
./configure –prefix=/usr/local/varnish
make
make install
转:http://www.uplook.cn/kbase-Index-show-view10393.html
#!/bin/bash
# BY kerryhu
# MAIL:king_819@163.com
# BLOG:http://kerry.blog.51cto.com
# Please manual operation yum of before Operation.....
#============================ 更新系统时间 ============================
yum install -y ntp
ntpdate time.nist.gov
echo "00 01 * * * ntpdate time.nist.gov" >> /etc/crontab
#============================ Varnish安装 =============================
如果是RedHat/CentOS系统,在安装varnish的时候首先要安装以下软件包
automake
autoconf
libtool
ncurses-devel
libxslt
groff
pcre-devel
pkgconfig
groupadd www
useradd www -g www -s /sbin/nologin
mkdir -p /data/varnish/{cache,logs}
chmod +w /data/varnish/{cache,logs}
chown -R www:www /data/varnish/{cache,logs}
cd /opt
yum install -y automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig
wget http://sourceforge.net/projects/varnish/files/varnish/2.1.3/varnish-2.1.3.tar.gz/download
tar -zxvf varnish-2.1.3.tar.gz
cd varnish-2.1.3
./configure --prefix=/usr/local/varnish
make;make install
yum -y install wget --noplugins wget freevps.us/downloads/nginx-centos-6.sh -O - | bash
注意安装完成后 php-fpm 默认跑在 apache 用户上。
安装完成后,如果你需要的 PHP 扩展未安装,可输入如下命令查询:
yum list | grep ^php*
找到了扩展的名字,就可以直接安装了:
# 以 php memcache 扩展为例 yum install -y php-pecl-memcached
此外还遇到的问题是 DOMDocument 找不到,直接 yum 安装 php-xml:
yum install -y php-xml
所有扩展 yum 安装完成后都需要重新启动 / 载入 php-fpm。
贴下内容来看看(非最新版本,请直接下载 .sh 文件):
#!/bin/bash ################## # disable apache # ################## service httpd stop chkconfig httpd off service xinetd stop chkconfig xinetd off service saslauthd stop chkconfig saslauthd off service sendmail stop chkconfig sendmail off service postfix stop chkconfig postfix off #Optimize yum on OpenVZ if [ -e "/proc/user_beancounters" ] then sed -i 's/plugins=1/plugins=0/' /etc/yum.conf fi #remove all current PHP and MySQL, will reinstall later. Also, remove apache yum -y remove httpd php mysql rsyslog sendmail postfix ################### # Add a few repos # ################### # install the Atomic repo for php and nginx (may use epel for nginx depending on version) wget -q -O - http://www.atomicorp.com/installers/atomic | sh # RPMForge for nginx dependencies rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm #EPEL for syslog-ng and nginx (may use atomic for nginx depending on version) rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm ################################ # Install PHP, NGINX and MySQL # ################################ #yum install GeoIP libGeoIP.so.1 --enablerepo=repoforge yum -y install mysql-server php-fpm php-mysql php-gd nginx nano exim syslog-ng ################# # install MySQL # ################# #yum -y install mysql-server cat > /etc/my.cnf <<END [mysqld] default-storage-engine = myisam key_buffer = 8M query_cache_size = 8M query_cache_limit = 4M max_connections=25 thread_cache=1 skip-innodb query_cache_min_res_unit=0 tmp_table_size = 4M max_heap_table_size = 4M table_cache=256 concurrent_insert=2 END echo Do not worry if you see a error stopping MySQL or NGINX /etc/init.d/mysqld stop /etc/init.d/mysqld start #################### # Set up NGINX PHP # #################### cat > /etc/nginx/php <<END index index.php index.html index.htm; location ~ \.php$ { include fastcgi_params; fastcgi_intercept_errors on; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; try_files \$uri =404; fastcgi_pass 127.0.0.1:9000; error_page 404 /404page.html; #makes nginx return it's default 404 # page instead of a blank page } END cat > /etc/nginx/nginx.conf <<END user nginx nginx; worker_processes 2; error_log logs/error.log; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; client_max_body_size 64M; sendfile on; tcp_nopush on; keepalive_timeout 3; gzip on; gzip_comp_level 2; gzip_proxied any; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; server_tokens off; include /etc/nginx/conf.d/*; } END rm /etc/nginx/conf.d/* cat > /etc/nginx/conf.d/default.conf <<END server { listen 80 default; server_name _; root /var/www/html; include php; } END mkdir /usr/share/nginx/logs/ service nginx restart chkconfig nginx on chkconfig mysqld on cat > /etc/php-fpm.d/www.conf <<END ; Start a new pool named 'www'. [www] ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = 127.0.0.1:9000 ; Set listen(2) backlog. A value of '-1' means unlimited. ; Default Value: -1 ;listen.backlog = -1 ; List of ipv4 addresses of FastCGI clients which are allowed to connect. ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original ; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address ; must be separated by a comma. If this value is left blank, connections will be ; accepted from any ip address. ; Default Value: any listen.allowed_clients = 127.0.0.1 ; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0666 ;listen.owner = nobody ;listen.group = nobody ;listen.mode = 0666 ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = apache ; RPM: Keep a group allowed to write in log dir. group = apache ; Choose how the process manager will control the number of child processes. ; Possible Values: ; static - a fixed number (pm.max_children) of child processes; ; dynamic - the number of child processes are set dynamically based on the ; following directives: ; pm.max_children - the maximum number of children that can ; be alive at the same time. ; pm.start_servers - the number of children created on startup. ; pm.min_spare_servers - the minimum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is less than this ; number then some children will be created. ; pm.max_spare_servers - the maximum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is greater than this ; number then some children will be killed. ; Note: This value is mandatory. pm = dynamic ; The number of child processes to be created when pm is set to 'static' and the ; maximum number of child processes to be created when pm is set to 'dynamic'. ; This value sets the limit on the number of simultaneous requests that will be ; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. ; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP ; CGI. ; Note: Used when pm is set to either 'static' or 'dynamic' ; Note: This value is mandatory. pm.max_children = 5 ; The number of child processes created on startup. ; Note: Used only when pm is set to 'dynamic' ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 pm.start_servers = 1 ; The desired minimum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic' pm.min_spare_servers = 1 ; The desired maximum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic' pm.max_spare_servers = 3 ; The number of requests each child process should execute before respawning. ; This can be useful to work around memory leaks in 3rd party libraries. For ; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. ; Default Value: 0 pm.max_requests = 500 ; The URI to view the FPM status page. If this value is not set, no URI will be ; recognized as a status page. By default, the status page shows the following ; information: ; accepted conn - the number of request accepted by the pool; ; pool - the name of the pool; ; process manager - static or dynamic; ; idle processes - the number of idle processes; ; active processes - the number of active processes; ; total processes - the number of idle + active processes. ; The values of 'idle processes', 'active processes' and 'total processes' are ; updated each second. The value of 'accepted conn' is updated in real time. ; Example output: ; accepted conn: 12073 ; pool: www ; process manager: static ; idle processes: 35 ; active processes: 65 ; total processes: 100 ; By default the status page output is formatted as text/plain. Passing either ; 'html' or 'json' as a query string will return the corresponding output ; syntax. Example: ; http://www.foo.bar/status ; http://www.foo.bar/status?json ; http://www.foo.bar/status?html ; Note: The value must start with a leading slash (/). The value can be ; anything, but it may not be a good idea to use the .php extension or it ; may conflict with a real PHP file. ; Default Value: not set ;pm.status_path = /status ; The ping URI to call the monitoring page of FPM. If this value is not set, no ; URI will be recognized as a ping page. This could be used to test from outside ; that FPM is alive and responding, or to ; - create a graph of FPM availability (rrd or such); ; - remove a server from a group if it is not responding (load balancing); ; - trigger alerts for the operating team (24/7). ; Note: The value must start with a leading slash (/). The value can be ; anything, but it may not be a good idea to use the .php extension or it ; may conflict with a real PHP file. ; Default Value: not set ;ping.path = /ping ; This directive may be used to customize the response of a ping request. The ; response is formatted as text/plain with a 200 response code. ; Default Value: pong ;ping.response = pong ; The timeout for serving a single request after which the worker process will ; be killed. This option should be used when the 'max_execution_time' ini option ; does not stop script execution for some reason. A value of '0' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 ;request_terminate_timeout = 0 ; The timeout for serving a single request after which a PHP backtrace will be ; dumped to the 'slowlog' file. A value of '0s' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 ;request_slowlog_timeout = 0 ; The log file for slow requests ; Default Value: /var/log/php-fpm.log.slow ;slowlog = /var/log/php-fpm.log.slow ; Set open file descriptor rlimit. ; Default Value: system defined value ;rlimit_files = 1024 ; Set max core size rlimit. ; Possible Values: 'unlimited' or an integer greater or equal to 0 ; Default Value: system defined value ;rlimit_core = 0 ; Chroot to this directory at the start. This value must be defined as an ; absolute path. When this value is not set, chroot is not used. ; Note: chrooting is a great security feature and should be used whenever ; possible. However, all PHP paths will be relative to the chroot ; (error_log, sessions.save_path, ...). ; Default Value: not set ;chroot = ; Chdir to this directory at the start. This value must be an absolute path. ; Default Value: current directory or / when chroot ;chdir = /var/www ; Redirect worker stdout and stderr into main error log. If not set, stdout and ; stderr will be redirected to /dev/null according to FastCGI specs. ; Default Value: no ;catch_workers_output = yes ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from ; the current environment. ; Default Value: clean env ;env[HOSTNAME] = $HOSTNAME ;env[PATH] = /usr/local/bin:/usr/bin:/bin ;env[TMP] = /tmp ;env[TMPDIR] = /tmp ;env[TEMP] = /tmp ; Additional php.ini defines, specific to this pool of workers. These settings ; overwrite the values previously defined in the php.ini. The directives are the ; same as the PHP SAPI: ; php_value/php_flag - you can set classic ini defines which can ; be overwritten from PHP call 'ini_set'. ; php_admin_value/php_admin_flag - these directives won't be overwritten by ; PHP call 'ini_set' ; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. ; Defining 'extension' will load the corresponding shared extension from ; extension_dir. Defining 'disable_functions' or 'disable_classes' will not ; overwrite previously defined php.ini values, but will append the new value ; instead. ; Default Value: nothing is defined by default except the values in php.ini and ; specified at startup with the -d argument ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com ;php_flag[display_errors] = off php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 32M php_admin_value[upload_max_filesize] = 32M END mkdir /var/www mkdir /var/www/html/ useradd apache service php-fpm start chkconfig php-fpm on iptables -I INPUT -p tcp --dport 80 -j ACCEPT service iptables save wget freevps.us/downloads/setup-vhost.sh -O /bin/setup-vhost chmod 755 /bin/setup-vhost echo "alias nano='nano -w'" >> ~/.bashrc clear echo Installation done. echo to create a vhost, run echo setup-vhost example.com echo do not include the www. subdomain.
转:http://blog.csdn.net/xymyeah/article/details/6939544
一、一般来说nginx 配置文件中对优化比较有作用的为以下几项:
1. worker_processes 8;
nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。
2. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
为每个进程分配cpu,上例中将8 个进程分配到8 个cpu,当然可以写多个,或者将一
个进程分配到多个cpu。
3. worker_rlimit_nofile 65535;
这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
查看linux系统文件描述符的方法:
[root@web001 ~]# sysctl -a | grep fs.file
fs.file-max = 789972
fs.file-nr = 510 0 789972
4. use epoll;
使用epoll 的I/O 模型
(
补充说明:
与apache相类,nginx针对不同的操作系统,有不同的事件模型
A)标准事件模型
Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
B)高效事件模型
Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll: 使用于Linux内核2.6版本及以后的系统。
/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用于 Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁。
)
5. worker_connections 65535;
每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections。
6. keepalive_timeout 60;
keepalive 超时时间。
7. client_header_buffer_size 4k;
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
分页大小可以用命令getconf PAGESIZE 取得。
[root@web001 ~]# getconf PAGESIZE
4096
但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。
8. open_file_cache max=65535 inactive=60s;
这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
9. open_file_cache_valid 80s;
这个是指多长时间检查一次缓存的有效信息。
10. open_file_cache_min_uses 1;
open_file_cache 指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
二、关于内核参数的优化:
net.ipv4.tcp_max_tw_buckets = 6000
timewait 的数量,默认是180000。
net.ipv4.ip_local_port_range = 1024 65000
允许系统打开的端口范围。
net.ipv4.tcp_tw_recycle = 1
启用timewait 快速回收。
net.ipv4.tcp_tw_reuse = 1
开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接。
net.ipv4.tcp_syncookies = 1
开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。
net.core.somaxconn = 262144
web 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。
net.core.netdev_max_backlog = 262144
每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.ipv4.tcp_max_orphans = 262144
系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS 攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
net.ipv4.tcp_max_syn_backlog = 262144
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M 内存的系统而言,缺省值是1024,小内存的系统则是128。
net.ipv4.tcp_timestamps = 0
时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
net.ipv4.tcp_synack_retries = 1
为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。
net.ipv4.tcp_syn_retries = 1
在内核放弃建立连接之前发送SYN 包的数量。
net.ipv4.tcp_fin_timeout = 1
如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些。
net.ipv4.tcp_keepalive_time = 30
当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时。
三、下面贴一个完整的内核优化设置:
vi /etc/sysctl.conf CentOS5.5中可以将所有内容清空直接替换为如下内容:
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
使配置立即生效可使用如下命令:
/sbin/sysctl -p
四、下面是关于系统连接数的优化
linux 默认值 open files 和 max user processes 为 1024
#ulimit -n
1024
#ulimit –u
1024
问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。
解决方法:
使用 ulimit –n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)
有如下三种修改方式:
1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最后增加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果
# ulimit -n
65535
# ulimit -u
65535
备注:ulimit 命令本身就有分软硬设置,加-H 就是硬,加-S 就是软默认显示的是软限制
soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。 soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。
五、下面是一个简单的nginx 配置文件:
user www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000
01000000;
error_log /www/log/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;
events
{
use epoll;
worker_connections 204800;
}
http
{
include mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_temp_file_write_size 8k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
server
{
listen 8080;
server_name backup.aiju.com;
index index.php index.htm;
root /www/html/;
location /status
{
stub_status on;
}
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
}
log_format access ‘$remote_addr — $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
access_log /www/log/access.log access;
}
}
六、关于FastCGI 的几个指令:
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10minactive=5m;
这个指令为FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。
fastcgi_connect_timeout 300;
指定连接到后端FastCGI 的超时时间。
fastcgi_send_timeout 300;
向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间。
fastcgi_read_timeout 300;
接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应答的超时时间。
fastcgi_buffer_size 4k;
指定读取FastCGI 应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k。
fastcgi_buffers 8 4k;
指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答。
fastcgi_busy_buffers_size 8k;
这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers 的两倍。
fastcgi_temp_file_write_size 8k;
在写入fastcgi_temp_path 时将用多大的数据块,默认值是fastcgi_buffers 的两倍。
fastcgi_cache TEST
开启FastCGI 缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误。
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟。
fastcgi_cache_min_uses 1;
缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除。
fastcgi_cache_use_stale error timeout invalid_header http_500;
不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的。以上为nginx 中FastCGI 相关参数,另外,FastCGI 自身也有一些配置需要进行优化,如果你使用php-fpm 来管理FastCGI,可以修改配置文件中的以下值:
60
同时处理的并发请求数,即它将开启最多60 个子线程来处理并发连接。
102400
最多打开文件数。
204800
每个进程在重置之前能够执行的最多请求数。
转载:http://club.alimama.com/read-htm-tid-1221587-fpage-2.html
下面的代码只是为了讲解才这样列出来的,不一定全要用上,要根据自己网站的情况.
如下面5,6两行就要根据自己网站情况进行定义的
********************************************************
1、<!--页面注解-->
2、<html>
3、<head>
4、<title>页面标题</title>
5、<meta http-equiv=Content-Language content=zh-cn>
6、<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
7、<meta name="keywords" content="关键词">
8、<meta name="description" content="网站描述">
9、<link href="inc/css.css" type="text/css" rel="stylesheet">
10、</head>
11、<body>
12、<div>
13、<h1>页面内容标题</h1>
14、<h2>页面相关性标题</h2>
15、<h3>标题系列</h3>
16、<h4>标题系列</h4>
17、<h5>标题系列</h5>
18、<h6>标题系列</h6>
19、<img data-original="xxx.jpg" alt="图片说明">
20、<a href="/" title="链接说明">链接词</a>
21、<strong>重点关键词强调</strong>
22、<b>关键词强调</b><u>关键词强调</u><i>关键词强调</i>
23、</div>
25、<div>
26、版权部分关键词强调
27、</div>
28、</body>
29、</html>
********************************************************
注:在<body>..</body>标签区中的罗列,都是一些基础的HTML标签,这些标签出现的次序是可以变化的。
下面来给大家详细解答一下。
第1行的<!--页面注解-->
这个标签是用来做HTML代码注解的,很多站在这里会写上关键词,这种形式的注解在浏览器中是不会显示的,而搜索引擎可以读到。所以这个标签有的时候会成为作弊的一种形式,不要过多的用这种标签到来注明你的关键词,否则如果搜索引擎认为你是作弊的话,就惨了。
第4行<title>页面标题</title>。这是相当重要的!
这里字字值千金!对于做百度SEO的朋友,一定要记得这个标签可能是你是否真正能够做到排名靠前的重点,而且这个重点绝对不容忽视。标题主要注意你的用词,如果你做垃圾站,堆关键词也无所谓,如果你要做正规站点,请你正确对待,写得标准一点,不要堆关键字,保持你的主要词在这里出现三次就行,太多对你没有好处,对排名也不会有好处。GG并不喜欢太长的标题,百度也偶尔提到只希望在标题的前20个字里出现你的关键词。明确这些以后,还要注意的是,你的主要关键词应该在标题里越靠前越好!
第7行<meta name="keywords" content="关键词">这个的用途现在权重越来越低,但是再低都是有权重的,只要认真对待,这里的词是有效果的。这里注意两点:
第一、大部分人都会选择在这里写关键词不会超过三个,有的人直接只写一个,这是有好处的,每一处标签都有权重,你强调的内容越少,那么它的权重会相对更高的,所以不要写太多,否则不如不写,而让搜索引擎自己去判断你的页面关键词。
第二、几乎所有的SEO专业人员都会跟你说尽量在每一个页面写不同的关键词,避免被认为是重复页面的危险。
第8行<meta name="description" content="网站描述">这个是主要为了在搜索结果里出现的索引结果的,索引结果就是在百度搜索你的站的时候标题下面的摘要内容。这是一个页面的导读,用来说明网页的主要内容,当然现在的权重不高,跟keywords标签一样,不太受重视。而且现在由于搜索引擎机器人的越来越智能化,基本上已经实现整个页面的摘要内容随意出现它的索引结果里了,搜索引擎会根据你搜索的内容不同显示不同的索引。你如果要写description,就认真去写,很多人是用这里来控制搜索引擎的索引显示的,因为网站描述写得越具体,就越有可能在索引的时候出现这个标签中的内容。
第13行<h1>页面内容标题</h1>这个标签是一个页面最重要的标签,也是搜索引擎定位这个页面的主要依据,如果你的<h1>标签里没有出现你的页面关键字,那真是的一种很大的损失,这里的权重相对于其它的在<body>区的标签来说更加重要。在HTML代码中,它的重要性仅次于<title>。很多人放弃写这个标签,对于搜索引擎是很不友好的,你可以不出现其它的强调关键词的标签,但是这个标签一定要出现,这是告诉搜索引擎你的页面用一句话应该如何表达,如果这一行字都没有,再智能化的机器人可能都会以你的<title>来决定是否用来作为一个词的排名,很多时候一个网站的页面标题都是完全一样的,因为他们程序的原因,但是如果你没有办法修改title,已经损失很大了,而如果你的页面这个<h1>标签也没有出现的话,我不知道搜索引擎会怎么样去理解一个页面,对于SEO来说,那真很糟糕的一件事情。所以,认真对待你的页面<h1>,这是很重要的,要强调的是,这个标签一个页面不要出现太多,一次就行了,道理很简单,太多会让别人无法确定你页面中哪一个才是最重要的,无法确定重点跟没有这个标签我觉得没有太大的分别。所以,最好只出现1次,以达到明确说明的目的。
第14行<h2>页面相关性标题</h2>这个标签与<h1>是一样和道理,但是权重相对来说较低,如果你的页面没有<h1>,那么这个标签对于页面来说基本上就相当于<h1>的重要性了。这里面你包含的是长尾关键词相关的内容,比如你的页面做几个关键词,主词应该出现在<h1>里,那么其它的词以及你想发展的词就可以出现在<h2>里,这样来说是一种合理的安排。
而<h3>~<h6>这些标签,重要性是依次递减的,在一个页面的权重越来越低。
第19行<img data-original="xxx.jpg" alt="图片说明">我想这个标签很多人都知道,它的作用很明确,就是指定一张图片的说明文字,让搜索引擎知道这张图片是关于什么的。比如你的图片是"刘亦菲",那么你的alt="图片说明"中的"图片说明"就应该是与"刘亦菲"相关的词或者句子。这样写当然也有利于你在图片搜索的结果里显示排名更前面一点,不过现在百度基本上是以页面标题作为一张图片排名的要素,当然,你的alt标记做得好,将会增加你的图片匹配度。关于图片说明的研究,以后我也许会写一篇分析性的文章,因为有<a>链接的图片里,还会有一个title标签,title与alt这两个谁重要,是有必要研究一下的。
第20行<a href="/" title="链接说明">链接词</a>这是链接说明,同时也是一个页面链接的SEO重点,这里的"链接词"相当的重要,如果你跟别人交换链接,你这个词的写法是起着外链好坏与否的决定性因素的。"链接词"建议你最好写成自己的关键词,如果觉得实在不行或者怎么样,你一定要在"链接说明"里出现你的关键词。否则对于排名,你的链接做得没有太大的好处。这在SEO专业术语里还有一种叫法,叫做"google炸弹",就是用很多站点,同时做链接到一个网站,然后所有的"链接词"都写一个词-"刘亦菲",不久以后google就会将这个站当做"刘亦菲"这个词最权威的站点,即使被那些站点链接的这个页面没有任何与"刘亦菲"相关的内容,这个网站在"刘亦菲"这个词的排名情况也会很好。不过google已经调整了算法,但是这样做链接肯定是有用的,一定要认真对待你的链接。还有一个重点,就是对方的链接,如果是JS调用的,你就别想在他那里得到任何权重,因为搜索引擎不会去读取JS里的内容,所以,建议大家好好做链接,不要做了链接你的站却跟没做一样。像百度空间的友情链接就是JS文件调用的,所以百度空间里的友情链接你是没有权重的。具体可以查看HTML代码,正常情况下一个页面你找不到你的网站地址在<a>..</a>标签内出现,基本上这就是属于无效链接。
第21行<strong>重点关键词强调</strong>这个标签基实重要性仅次于<h1>,很多人都这样跟我讲,我也基本上认同。很确定的是它比<b>、<u>、<i>等标签要权重高。所以如果你的页面有很重要的词,而你想强调它,首先选这个<strong>标签吧,接下来相对不重要的词强调请你选<b>、<u>、<i>等标签。当然,不要用得太多了,用得太多没有重点就等于没有用了。
第26行版权部分关键词强调
我为什么要写这个?因为这个权重越来越高了,在底部版权部分,及很接近版权部分出现关键词,是一种手法。在这里强调你的关键词,是让你的关键词布局更加合理,而不是头部出现关键词,中部强调很多次,而底部却没有什么相关联的内容,这个词在这个页面是否值得怀疑呢?