Archive for April, 2009

我叫小沈阳

April 6th, 2009


简介:我叫小沈阳
作词:高进 作曲:高进
歌词:
Hello 我是小沈阳
英文名字 小小沈沈y-ang阳
老妹儿 老妹儿 你说为什么呢
Come On 风吹稻花香 小河水流淌
黑土地里养育着咱那勤劳的爹娘
平凡的模样 可咱的嗓子亮
模仿陕北的民歌 还有神秘的刀郎
我叫小沈阳 艺名也叫小沈阳
沈是沈阳的沈哪 阳是沈阳的阳
我叫小沈阳 眼睛小却有光芒
这是为什么呢 你开心我的理想
山丹丹地那个开花哟 红个儿艳艳个儿艳
如果大海能够带走我的哀愁 就让它随风飘远
Rap:小的时候喜欢边玩耍边哼着歌
乌苏里只弯过一条长长的大河
直到有一天我开始自己生活
一路唱着小曲走过高岗山坡
忽然有一天醒来发现世道都变了
也不清楚我该做什么样子的我
就这样平平淡淡过着自己的生活
看穿繁华世界 我去听个歌
风吹稻花香 小河水流淌
黑土地里养育着咱那勤劳的爹娘
平凡的模样 可咱嗓子亮
模仿陕北的民歌 还有神秘的刀郎
我叫小沈阳 艺名也叫小沈阳
沈是沈阳的沈纳 阳是沈阳的阳
我叫小沈阳 眼睛小却有光芒
这是为什么呢 你开心我的理想
我叫小沈阳 艺名也叫小沈阳
沈是沈阳的沈哪 阳是沈阳的阳
我叫小沈阳 眼睛小却有光芒
这是为什么呢 你开心我的理想
我叫小沈阳 艺名也叫小沈阳
沈是沈阳的沈哪 阳是沈阳的阳
我叫小沈阳 眼睛小却有光芒
这是为什么呢 你开心我的理想
山丹丹地那个开花哟 红个儿艳艳个儿艳
如果大海能够带走我的哀愁 就让它随风飘远
——————————————

  • Share/Save/Bookmark

人在江湖

April 6th, 2009

人在江湖

3月28日,青岛专场演出。5000人的现场,无一空座,山崩地裂,热情空前。青岛父老懂相声爱相声,让人感动。主办方盆钵盈满,皆大欢喜。唯独青岛部分媒体信口雌黄,污言诽谤,令人遗憾。后得知,系某些龌龊条件未得逞,遂造谣污蔑。闻言感慨,只能用被禁言的语气表达我的心情。世上有没见过面的朋友,没有没见过面的冤家,仅此一次,以后改了,好吗?乖,我疼你们。

    力挺小沈阳,惹来与专家口角。有人捧,有人恨。切齿者有之,眼红者有之。其实,大可不必。我挺小沈阳,是艺人间的义气。论艺人成名,无非一命二运三风水,四积阴功五读书。步步血泪,声声吟叹,待行至峰顶,又高处不胜寒了。成名后,一大三大,名气大了,开销大是非大烦恼大。岂能尽如人意,但求无愧于心。艺人的苦恼,是外人无法想象的。您看到的是舞台上的花团锦簇,景片后的凄凉又有何人知晓呢?

我尊敬那些在自己领域钻研的专家教授,那是真正的学者!为国为民,用血汗做学问,这些位是我心中的圣人。我痛恨的是那些披着教授马甲的假专家。正文一点没有,闲白比谁都强。踢寡妇门,刨绝户坟,骂聋子,卷哑巴,调戏老太太,打小孩,一天到晚跟浪风抽得似的。看谁红骂谁,老憋着跟人家分账。人家一还嘴,他还犯小性,跟自己怄气,假模假式的装流氓。真流氓我都不怕,何况你这模仿秀呢?读圣贤书,做仁义事,您真不懂吗?百鸽呼雏,乌鸦反哺占其仁,蜂见花不采结尔群,鹿见灵芝不逮鸣其众,占其义,羊羔跪乳,马不欺母占其礼,蜘蛛罗网而食,蝼蚁塞穴避水占其智,鸡非晓日不鸣,雁非暖日不至占其信。都做到教授了,连仁义礼智信都不懂,还需要说相声的来普及,不丢人吗?看起来,专家无情教授无义啊!那位老说别人泡沫文化的教授,您换换说法行吗?逮谁说谁泡沫文化,您得出新作品呐。按春晚的标准也得一年一个新的,您这都五年了,还更新不?呵呵,德薄而位尊,力小而任重,此万祸之源也!口口声声是学者,一天到晚在演艺圈里腻着,人前反三俗,被窝看毛片。又想当教授,又想立牌坊。长虫绕葫芦,假充龙戏珠。估计这些位也确实没正事干,哭着喊着不炒作,可谁红往谁跟前凑合。这种心态,比结账后的嫖客空虚,比收工后的小姐寂寞,比年假里的鸡头孤单,我都想给教授点小费了。拜托,不要再用牙齿阉割艺人了,我们都穿上铁裤衩了,小心嘴。

    去吧,干点正事吧,灾区重建,台湾回归,贫困儿童,西部缺水,这些大事您快去研究吧。教授回头金不换!可千万别说这些与你无关,合着您就跟说相声唱二人转的犯能耐梗呐?再送您们几句话共勉:晨鸡初报,昏鸦早噪,哪一个不在红尘里闹。路遥遥,水迢迢,利名人上长安道。今日少年明日老,山依旧,人不见了。可笑可笑。

    叹罢多时,拿出一张祖德老师的照片,仔细端详着。一个学者,一个专家,一个真正的教授,一个德艺双馨的圣人。峥嵘峻拔高旷,顶天立地磅礴于天下。窗外,早春的冷月挂在天上,星星在颤抖。又偷望一眼祖德,真的令人柔肠寸断,犹豫彷徨悲伤,剪不断,理还乱。我端详着祖德的脸,那是一张摩擦系数极大的脸,使我身临其境的体会到那个久远的年代。整张脸极喜兴,一看就是喝了糖尿。真的奇怪,人脸怎能长得如此标致,细看竟然极象骨盆,造物主太神奇了。那一双眼睛,甚是有神,如栗子,底朝上,与膀胱相贴,尖朝下,前面贴耻骨联合,后面依直肠。英语叫prostate。祖德的嘴,豪爽通达,大笑时能直接看到裤衩上的花纹。那两个大牙,更是巧夺天工,我常天真的想,要是请祖德到后厨开启大桶番茄酱,那该何其壮观!就这张脸,气死画匠,难死木匠,鲁班来了都得哭,四面吊线,旋不出一个尜儿来。

    祖德对工作太忘我了,要注意身体,你不属于自己,你的身体属于所有肇事司机。另外,出门时,一定要佩戴避雷针,防患于未然。真有一天,被雷劈后,又被车压烂,用勺子往盆里舀尸体时,我们会难过的。

    请允许我赞美祖德。啊,祖德,你是一个奇才!一个伟人!有人背后议论你,他们说你:娘娘宫抱一兔爷,没人样。点灯不亮炒菜不香,不是好油。吃铁丝尿大筐。比电线杆子多挂下水。高粱地种荞麦,杂种。蛤蟆秧子跟着甲鱼转,装王八孙子。黄浦江翻船,浪催的。山羊群里跑京巴,狗日的野杂种。不!不!我不要听了,怎么能容忍他们这么说祖德呢?祖德为中国的历史发展做了多大的贡献!祖德的舍己为人,你们不知道吗?祖德的离去,明朝才有了郑和,祖德的离去,清朝才有了安德海,才有了李莲英!让我们赞美祖德吧,让我们吃饭时,都先把第一杯酒泼给祖德,祖德,给我们托梦吧!

     相比较祖德,他的弟弟信达就有些不妥了。你没有照顾好祖德吗!我知道你习惯性肠炎,把扁桃腺拉出去了,但你的心还在吗?你为什么拿祖德开玩笑?江苏靖江插宋文化公司的刘总亲口说,看见你在成人用品店买橡胶制品往头上戴,说搞化妆舞会,你演宋祖德。你什么意思吗?我很气愤,要为祖德打抱不平,今天不把你骂出绿屎来,算你没吃过韭菜。蛤蟆转长虫又托生个王八,三辈没眼眉的玩意。说话也不利落,老跟含着狗粮似的,你个花椒木。一个眼的判官,瞎鬼。木鱼改梆子,挨敲的货。癞蛤蟆插毛,你算飞禽还算走兽?撅屁股看天,有眼无珠。不怕你眼儿紧,我这有大棒槌。说句实在话,为了你,操不尽的心,还有你大爷。子曰:唯祖德与信达为难养也。

    也送几句话共勉:杀尽江湖百万兵,腰间宝剑血带腥。

                    呆犬不识英雄汉,粤东犹自叫铮铮。

   有朋友纳闷,此二人一姓宋一姓刘,为何亲兄弟?各位不知,这里有一位英雄母亲。其母善守寡,养五子。长子宋祖德,次子刘信达,三子庞小杨,四子萧雀,五子夏二。广东扫黄办曾为这位英雄母亲赠一匾:行行出状元。

呵呵,今天太快乐了。

看有人还嘴吗。

我很期待。。。。。。。

  • Share/Save/Bookmark

Nginx 常见应用技术指南[Nginx Tips] 第二版

April 4th, 2009

作者:NetSeek  http://www.linuxtone.org (IT运维专家网|集群架构|性能调优)
欢迎转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明.
首发时间: 2008-11-25     更新时间:2009-1-14

目 录
一、        Nginx 基础知识
二、        Nginx 安装及调试
三、        Nginx Rewrite
四、        Nginx Redirect
五、        Nginx 目录自动加斜线:
六、        Nginx Location
七、        Nginx expires
八、        Nginx 防盗链
九、        Nginx 访问控制
十、        Nginx日志处理
十一、     Nginx Cache
十二、     Nginx负载均衡
十三、       Nginx简单优化      
十四、        如何构建高性能的LEMP环境
十五、        Nginx服务监控
十六、        常见问题与错误处理.
十七、        相关资源下载

【前言】:
编写此技术指南在于推广普及NGINX在国内的使用,更方便的帮助大家了解和掌握NGINX的一些使用技巧。本指南很多技巧来自于网络和工作中或网络上朋友们问我的问题.在此对网络上愿意分享的朋友们表示感谢和致意!欢迎大家和我一起丰富本技术指南提出更好的建议!请朋友们关注: http://www.linuxtone.org 技术分享社区! 互想学习共同进步!

一、 Nginx 基础知识
1、简介
   Nginx (”engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
更多的请见官方wiki: http://wiki.codemongers.com/

2、 Nginx的优点
nginx做为HTTP服务器,有以下几项基本特性:
1)        处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
2)        无缓存的反向代理加速,简单的负载均衡和容错.
3)        FastCGI,简单的负载均衡和容错.
4)        模块化的结构。包括gzipping, byte ranges, chunked responses, 以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
5)        支持SSL 和 TLS SNI

Nginx专为性能优化而开发,性能是其最重要的考量, 实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验, 有报告表明能支持高达 50,000 个并发连接数。
Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响 应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连 接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言, nginx比lighthttpd更胜一筹。
Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。
Nginx采用master-slave模型, 能够充分利用SMP的优势,且能够减少工作进程在磁盘I/O的阻塞延迟。当采用select()/poll()调用时,还可以限制每个进程的连接数。
Nginx代码质量非常高,代码很规范, 手法成熟, 模块扩展也很容易。特别值得一提的是强大的Upstream与Filter链。 Upstream为诸如reverse proxy, 与其他服务器通信模块的编写奠定了很好的基础。而Filter链最酷的部分就是各个filter不必等待前一个filter执行完毕。它可以把前一个 filter的输出做为当前filter的输入,这有点像Unix的管线。这意味着,一个模块可以开始压缩从后端服务器发送过来的请求,且可以在模块接收 完后端服务器的整个请求之前把压缩流转向客户端。
Nginx采用了一些os提供的最新特性如对sendfile (Linux 2.2+),accept-filter (FreeBSD 4.1+),TCP_DEFER_ACCEPT (Linux 2.4+) 的支持,从而大大提高了性能

二、 Nginx 安装及调试
1、Pcre 安装

  1. ./configure
  2.   make && make install
  3.   cd ../

复制代码

2.        nginx 编译安装

  1. ./configure –user=www –group=www –prefix=/usr/local/nginx/ –with-http_stub_status_module –with-openssl=/usr/local/openssl
  2. make && make install

复制代码

更详细的模块定制与安装请参照官方wiki.

3、Nginx 配置文件测试:

  1. # /usr/local/nginx/sbin/nginx -t  //Debug 配置文件的关键命令需要重点撑握.
  2. 2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  3. 2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

复制代码

3、Nginx 启动:

  1. # /usr/local/nginx/sbin/nginx

复制代码

4、Nginx 配置文件修改重新加载:

  1. # kill -HUP `cat /usr/local/nginx/logs/nginx.pid

复制代码

`
三、Nginx Rewrite

1.  Nginx Rewrite 基本标记(flags)
last – 基本上都用这个Flag。
※相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则
break – 中止Rewirte,不再继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
      ※原有的url支持正则  重写的url不支持正则

2.  正则表达式匹配,其中:
    * ~         为区分大小写匹配
    * ~*       为不区分大小写匹配
    * !~和!~*   分别为区分大小写不匹配及不区分大小写不匹配

3. 文件及目录匹配,其中:
   * -f和!-f用来判断是否存在文件
    * -d和!-d用来判断是否存在目录
    * -e和!-e用来判断是否存在文件或目录
    * -x和!-x用来判断文件是否可执行

3.  Nginx 的一些可用的全局变量,可用做条件判断:

  1. $args
  2. $content_length
  3. $content_type
  4. $document_root
  5. $document_uri
  6. $host
  7. $http_user_agent
  8. $http_cookie
  9. $limit_rate
  10. $request_body_file
  11. $request_method
  12. $remote_addr
  13. $remote_port
  14. $remote_user
  15. $request_filename
  16. $request_uri
  17. $query_string
  18. $scheme
  19. $server_protocol
  20. $server_addr
  21. $server_name
  22. $server_port
  23. $uri

复制代码

四、 Nginx Redirect
将所有linuxtone.org与netseek.linuxtone.org域名全部自跳转到http://www.linuxtone.org

  1. server
  2. {
  3. listen 80;
  4. server_name linuxtone.org netseek.linuxtone.org;
  5. index index.html index.php;
  6. root /data/www/wwwroot;
  7. if ($host !~ “^www\.linxtone\.org$”) {
  8. rewrite ^(.*) http://www.linuxtone.org$1 redirect;
  9. }
  10. ……………………
  11. }

复制代码

五、 Nginx 目录自动加斜线:

  1. if (-d $request_filename){
  2.            rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
  3.      }

复制代码

六  Nginx Location

1.基本语法:[和上面rewrite正则匹配语法基本一致]
location [=|~|~*|^~] /uri/ { … }
    * ~  为区分大小写匹配
    * ~* 为不区分大小写匹配
    * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

示例1:
location = / {
# matches the query / only.
# 只匹配 / 查询。
}
匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配

示例2:
location ^~ /images/ {
# matches any query beginning with /images/ and halts searching,
# so regular expressions will not be checked.
# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。

示例3:
location ~* \.(gif|jpg|jpeg)$ {
# matches any request ending in gif, jpg, or jpeg. However, all
# requests to the /images/ directory will be handled by
}
# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。

七、 Nginx expires

1.根据文件类型expires

  1. # Add expires header for static content
  2. location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
  3.     if (-f $request_filename) {
  4.        root /data/www/wwwroot/bbs;
  5.        expires      1d;
  6.        break;
  7.     }
  8. }

复制代码

2、根据判断某个目录

  1. # serve static files
  2. location ~ ^/(images|javascript|js|css|flash|media|static)/  {
  3. root    /data/www/wwwroot/down;
  4.         expires 30d;
  5.   }

复制代码

八、  Nginx 防盗链

1.        针对不同的文件类型

  1. #Preventing hot linking of images and other file types
  2. location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
  3.         valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost baidu.com;
  4. if ($invalid_referer) {
  5.       rewrite   ^/   ;
  6.      # return   403;
  7.       }
  8. }

复制代码

2.        针对不同的目录

  1. location /img/ {
  2.     root /data/www/wwwroot/bbs/img/;
  3.     valid_referers none blocked server_names *.linuxtone.org http://localhost baidu.com;
  4.     if ($invalid_referer) {
  5.                    rewrite  ^/  ;
  6.                    #return   403;
  7.     }
  8. }

复制代码

3.        同实现防盗链和expires的方法

  1. #Preventing hot linking of images and other file types
  2. location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
  3.         valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost ;
  4. if ($invalid_referer) {
  5.       rewrite   ^/   ;
  6.                      }
  7.      access_log off;
  8.      root /data/www/wwwroot/bbs;
  9. expires 1d;
  10.      break;
  11. }

复制代码

九、 Nginx 访问控制

1.        Nginx 身份证验证

  1. #cd /usr/local/nginx/conf
  2. #mkdir htpasswd
  3. /usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/htpasswd/tongji linuxtone
  4. #添加用户名为linuxtone
  5. New password:   (此处输入你的密码)
  6. Re-type new password:   (再次输入你的密码)
  7. Adding password for user
  8. http://count.linuxtone.org/tongji/data/index.html(目录存在/data/www/wwwroot/tongji/data/目录下)
  9. 将下段配置放到虚拟主机目录,当访问http://count.linuxtone/tongji/即提示要密验证:
  10. location ~ ^/(tongji)/  {
  11.                 root    /data/www/wwwroot/count;
  12.                         auth_basic              ”LT-COUNT-TongJi”;
  13.                         auth_basic_user_file  /usr/local/nginx/conf/htpasswd/tongji;
  14.                 }

复制代码

2.        Nginx 禁止访问某类型的文件.
如,Nginx下禁止访问*.txt文件,配置方法如下.

  1. location ~* \.(txt|doc)$ {
  2.    if (-f $request_filename) {
  3.    root /data/www/wwwroot/linuxtone/test;
  4.    #rewrite …..可以重定向到某个URL
  5.    break;
  6.    }
  7. }

复制代码

方法2:

  1. location ~* \.(txt|doc)${
  2.         root /data/www/wwwroot/linuxtone/test;
  3.         deny all;
  4. }

复制代码

实例:
禁止访问某个目录

  1. location ~ ^/(WEB-INF)/ {
  2.             deny all;
  3. }  

复制代码

3.        使用ngx_http_access_module限制ip访问

  1. location / {
  2.     deny    192.168.1.1;
  3.     allow   192.168.1.0/24;
  4.     allow   10.1.1.0/16;
  5.     deny    all;
  6. }

复制代码

详细参见wiki: http://wiki.codemongers.com/NginxHttpAccessModule#allow

4.        Nginx 下载限制并发和速率

  1. limit_zone   linuxtone  $binary_remote_addr  10m;
  2. server
  3.        {
  4.                listen       80;
  5.                server_name  down.linuxotne.org;
  6.                index index.html index.htm index.php;
  7.                root   /data/www/wwwroot/down;
  8.                #Zone limit
  9.                location / {
  10.                    limit_conn   linuxtone  1;
  11.                    limit_rate  20k;
  12.                }
  13. ……….
  14.        }

复制代码

只允许客房端一个线程,每个线程20k.
【注】limit_zone   linuxtone  $binary_remote_addr  10m; 这个可以定义在主的

5.        Nginx 实现Apache一样目录列表

  1. location  /  {
  2.     autoindex  on;
  3. }

复制代码

6.        上文件大小限制
主配置文件里加入如下,具体大小根据你自己的业务做调整。
client_max_body_size 10m;                                                         

十、        Nginx 日志处理

1.Nginx 日志切割
#contab -e
59 23 * * * /usr/local/sbin/logcron.sh /dev/null 2>&1
[root@count ~]# cat /usr/local/sbin/logcron.sh

  1. #!/bin/bash
  2. log_dir=”/data/logs”
  3. time=`date +%Y%m%d`  
  4. /bin/mv  ${log_dir}/access_linuxtone.org.log ${log_dir}/access_count.linuxtone.org.$time.log
  5. kill -USR1 `cat  /var/run/nginx.pid`

复制代码

更多的日志分析与处理就关注(同时欢迎你参加讨论):http://bbs.linuxtone.org/forum-8-1.html

2.利用AWSTATS分析NGINX日志
  设置好Nginx日志格式,仍后利用awstats进行分析.
请参考: http://bbs.linuxtone.org/thread-56-1-1.html

3.        Nginx 如何不记录部分日志
日志太多,每天好几个G,少记录一些,下面的配置写到server{}段中就可以了
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$
{
     access_log off;
}

十一、Nginx Cache服务配置

如果需要将文件缓存到本地,则需要增加如下几个子参数

  1. proxy_store on;
  2. proxy_store_access user:rw group:rw all:rw;
  3. proxy_temp_path 缓存目录;

复制代码

其中,
proxy_store on用来启用缓存到本地的功能,
proxy_temp_path用来指定缓存在哪个目录下,如:proxy_temp_path html;

在经过上一步配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端拉取文件,必须修改

  1. proxy_pass:
  2. if ( !-e $request_filename) {
  3.     proxy_pass  http://mysvr;
  4. }

复制代码

即改成有条件地去执行proxy_pass,这个条件就是当请求的文件在本地的proxy_temp_path指定的目录下不存在时,再向后端拉取。

   
更多更高级的应用可以研究ncache,详细请参照http://bbs.linuxtone.org 里ncache相关的贴子.

十二、Nginx 负载均衡
1. Nginx 负载均衡基础知识
nginx的upstream目前支持4种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)

2.        Nginx 负载均衡实例1

  1. upstream bbs.linuxtone.org {#定义负载均衡设备的Ip及设备状态
  2.     server 127.0.0.1:9090 down;
  3.     server 127.0.0.1:8080 weight=2;
  4.     server 127.0.0.1:6060;
  5.     server 127.0.0.1:7070 backup;
  6. }

复制代码

在需要使用负载均衡的server中增加
proxy_pass http://bbs.linuxtone.org/;

每个设备的状态设置为:
a)        down 表示单前的server暂时不参与负载
b)        weight 默认为1.weight越大,负载的权重就越大。
c)        max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
d)        fail_timeout:max_fails次失败后,暂停的时间。
e)        backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

3.        Nginx 负载均衡实例 2
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效,也可以用作提高Squid缓存命中率.

简单的负载均等实例:
#vi nginx.conf  //nginx主配置文件核心配置

  1. ……….
  2. #loadblance my.linuxtone.org
  3.        upstream  my.linuxtone.org  {
  4.        ip_hash;
  5.        server   127.0.0.1:8080;
  6.        server   192.168.169.136:8080;
  7.        server   219.101.75.138:8080;
  8.        server   192.168.169.117;
  9.        server   192.168.169.118;
  10.        server   192.168.169.119;
  11.      }
  12. …………..
  13. include          vhosts/linuxtone_lb.conf;
  14. ………
  15. # vi proxy.conf
  16. proxy_redirect off;
  17. proxy_set_header Host $host;
  18. proxy_set_header X-Real-IP $remote_addr;
  19. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  20. client_max_body_size 50m;
  21. client_body_buffer_size 256k;
  22. proxy_connect_timeout 30;
  23. proxy_send_timeout 30;
  24. proxy_read_timeout 60;
  25. proxy_buffer_size 4k;
  26. proxy_buffers 4 32k;
  27. proxy_busy_buffers_size 64k;
  28. proxy_temp_file_write_size 64k;
  29. proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
  30. proxy_max_temp_file_size 128m;
  31. proxy_store on;
  32. proxy_store_access   user:rw  group:rw  all:r;
  33. #nginx cache               
  34. #client_body_temp_path  /data/nginx_cache/client_body 1 2;
  35. proxy_temp_path /data/nginx_cache/proxy_temp 1 2;

复制代码

#vi  linuxtone_lb.conf

  1. server
  2.     {
  3.         listen  80;
  4.         server_name my.linuxtone.org;
  5.         index index.php;
  6.         root /data/www/wwwroot/mylinuxtone;
  7.         if (-f $request_filename) {
  8.             break;
  9.            }
  10.         if (-f $request_filename/index.php) {
  11.           rewrite (.*) $1/index.php break;
  12.         }
  13.         error_page 403 http://my.linuxtone.org/member.php?m=user&a=login;
  14.         location / {
  15.            if ( !-e $request_filename) {
  16.                proxy_pass http://my.linuxtone.org;
  17.                break;
  18.            }
  19.            include /usr/local/nginx/conf/proxy.conf;
  20.         }
  21. }

复制代码

十三、Nginx简单优化

1.        减小nginx编译后的文件大小 (Reduce file size of nginx)
默认的nginx编译选项里居然是用debug模式(-g)的(debug模式会插入很多跟踪和ASSERT之类),编译以后一个nginx有好几兆。去掉nginx的debug模式编译,编译以后只有几百K
在 auto/cc/gcc,最后几行有:
# debug

  1. CFLAGS=”$CFLAGS -g”

复制代码

注释掉或删掉这几行,重新编译即可。

2.        修改Nginx的header伪装服务器
1)        修改nginx.h

  1. #vi nginx-0.7.30/src/core/nginx.h
  2. #define NGINX_VERSION      ”1.8″
  3. #define NGINX_VER          “LTWS/” NGINX_VERSION
  4. #define NGINX_VAR          “NGINX”
  5. #define NGX_OLDPID_EXT     ”.oldbin”

复制代码

2) 修改nginx_http_header_filter_module
#vi nginx-0.7.30/src/http/ngx_http_header_filter_module.c
将如下

  1. static char ngx_http_server_string[] = “Server: nginx” CRLF;

复制代码

修改为

  1. static char ngx_http_server_string[] = “Server: LTWS” CRLF;

复制代码

a)        修改nginx_http_header_filter_module
#vi nginx-0.7.30/src/http/ngx_http_special_response.c
将如下:

  1. static u_char ngx_http_error_full_tail[] =
  2. “<hr><center>” NGINX_VER “</center>” CRLF
  3. “</body>” CRLF
  4. “</html>” CRLF
  5. ;

复制代码

  1. static u_char ngx_http_error_tail[] =
  2. “<hr><center>nginx</center>” CRLF
  3. “</body>” CRLF
  4. “</html>” CRLF
  5. ;

复制代码

修改为:

  1. static u_char ngx_http_error_full_tail[] =
  2. “<center> “NGINX_VER” </center>” CRLF
  3. “<hr><center>http://www.linuxtone.org</center>” CRLF
  4. “</body>” CRLF
  5. “</html>” CRLF
  6. ;
  7. static u_char ngx_http_error_tail[] =
  8. “<hr><center>LTWS</center>” CRLF
  9. “</body>” CRLF
  10. “</html>” CRLF
  11. ;

复制代码

修改后重新编译一下环境,
404错误的时候显示效果图(如果没有指定错误页的话):
 404.png


    

2009-2-2 00:20

利用curl命令查看服务器header
curl.png

 

2009-2-2 00:20

3.为特定的CPU指定CPU类型编译优化.
默认nginx使用的GCC编译参数是-O
需要更加优化可以使用以下两个参数
–with-cc-opt=’-O3′ \
–with-cpu-opt=opteron \
使得编译针对特定CPU以及增加GCC的优化.
此方法仅对性能有所改善并不会有很大的性能提升,供朋友们参考.
CPUD类型确定: # cat /proc/cpuinfo | grep “model name”
编译优化参数参考:http://en.gentoo-wiki.com/wiki/Safe_Cflags
4.Tcmalloc优化Nginx 性能

  1. # wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
  2. # tar zxvf libunwind-0.99-alpha.tar.gz
  3. # cd libunwind-0.99-alpha/
  4. # CFLAGS=-fPIC ./configure
  5. # make CFLAGS=-fPIC
  6. # make CFLAGS=-fPIC install
  7. # wget http://google-perftools.googlecode.com/files/google-perftools-0.98.tar.gz
  8. # tar zxvf google-perftools-0.98.tar.gz
  9. # cd google-perftools-0.98/
  10. # ./configure
  11. # make && make install
  12. # echo “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf
  13. # ldconfig
  14. # lsof -n | grep tcmalloc

复制代码

编译nginx 加载google_perftools_module:
./configure –with-google_perftools_module
在主配置文件加入nginx.conf 添加:
google_perftools_profiles /path/to/profile;

5.内核参数优化
# vi /etc/sysctl.conf   #在末尾增加以下内容:

  1. net.ipv4.tcp_fin_timeout = 30
  2. net.ipv4.tcp_keepalive_time = 300
  3. net.ipv4.tcp_syncookies = 1
  4. net.ipv4.tcp_tw_reuse = 1
  5. net.ipv4.tcp_tw_recycle = 1
  6. net.ipv4.ip_local_port_range = 5000 65000

复制代码

#使配置立即生效
/sbin/sysctl -p

十四、如何构建高性的LEMP
请参见: http://www.linuxtone.org/lemp/lemp.pdf
1、提供完整的配置脚本下载:http://www.linuxtone.org/lemp/scripts.tar.gz
2、提供NGINX常见配置范例含(虚拟主机,防盗链,Rewrite,访问控制,负载均衡
Discuz相关程序静态化及等等),你只要稍稍修改即可线上应用。 3、将原版的xcache替换成EA,并提供相关简单调优脚本及配置文件。
更多的及更新资料请关注: http://www.linuxtone.org

十五、Nginx监控
1、        RRDTOOL+Perl脚本画图监控
先安装好rrdtool ,关于rrdtool本文不作介绍,具体安装请参照linuxtone监控版块.
#cd /usr/local/sbnin
#wget http://blog.kovyrin.net/files/mrtg/rrd_nginx.pl.txt
#mv rrd_nginx.pl.txt rrd_nginx.pl
#chmod a+x rrd_nginx.pl

#vi rrd_nginx.pl   //配置脚本文件设置好路径
#!/usr/bin/perl
use RRDs;
use LWP::UserAgent;

# define location of rrdtool databases
my $rrd = ‘/data/www/wwwroot/nginx/rrd’;
# define location of images
my $img = ‘/data/www/wwwroot/nginx/html’;
# define your nginx stats URL
my $URL = “http://219.232.244.13/nginx_status”;
…………
【注】根据自己具体的状况修改相应的路径.
#crontab –e //加入如下
* * * * * /usr/local/sbin/rrd_nginx.pl
重启crond后,通过配置nginx虚拟主机指到/data/www/wwwroot/nginx/html目录,通过crond自动执行perl脚本会生成很多图片.
http://xxx/connections-day.png即可看到服务器状态图。

2、        官方Nginx-rrd 监控服务(多虚拟主机)(推荐
网址:http://www.nginx.eu/nginx-rrd.html
此解决方案其实是基于上述监控方案的一个改进和增强,同样先安装好rrdtool这个画图工具和相应的perl模块再做如下操作:
# yum install perl-HTML*
先建立好生成的库存和图片存放录

  1. #mkdir -p /data/www/wwwroot/nginx/{rrd,html}
  2. #cd /usr/local/sbin
  3. #wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz
  4. #tar zxvf nginx-rrd-0.1.4.tgz
  5. #cd nginx-rrd-0.1.4
  6. #cd etc/
  7. #cp nginx-rrd.conf /etc
  8. #cd etc/cron.d
  9. #cp nginx-rrd.cron /etc/cron.d
  10. #cd /usr/local/src/nginx-rrd-0.1.4/html
  11. # cp index.php /data/www/wwwroot/nginx/html/
  12. #cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin
  13. #cp * /usr/sbin/

复制代码

#vi /etc/nginx-rrd.conf

  1. #####################################################
  2. #
  3. # dir where rrd databases are stored
  4. RRD_DIR=”/data/www/wwwroot/nginx/rrd”;
  5. # dir where png images are presented
  6. WWW_DIR=”/data/www/wwwroot/nginx/html”;
  7. # process nice level
  8. NICE_LEVEL=”-19″;
  9. # bin dir
  10. BIN_DIR=”/usr/sbin”;
  11. # servers to test
  12. # server_utl;server_name
  13. SERVERS_URL=”http://219.32.205.13/nginx_status;219.32.205.13  http://www.linuxtone.org/nginx_status;www.linuxtone.org”"

复制代码

//根据你的具体情况做调整.
SEVERS_URL 格式 http://domain1/nginx_status;domain1 http://domain2/nginx_status;domain2
这种格式监控多虚拟主机连接状态:
重点启crond服务,仍后通过http://219.32.205.13/nginx/html/ 即可访问。配置过程很简单!

3、        CACTI模板监控Nginx
利用Nginx_status状态来画图实现CACTI监控
nginx编译时允许http_stub_status_module

# vi /usr/local/nginx/conf/nginx.conf

  1. location /nginx_status {
  2. stub_status on;
  3. access_log off;
  4. allow 192.168.1.37;
  5. deny all;
  6. }

复制代码

  1. # kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
  2. # wget http://forums.cacti.net/download.php?id=12676
  3. # tar xvfz cacti-nginx.tar.gz
  4. # cp cacti-nginx/get_nginx_socket_status.pl /data/cacti/scripts/
  5. # cp cacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/
  6. # chmod 755 /data/cacti/scripts/get_nginx*

复制代码

检测插件

  1. # /data/cacti/scripts/get_nginx_clients_status.pl http://192.168.1.37/nginx_status

复制代码

在cacti管理面板导入
cacti_graph_template_nginx_clients_stat.xml
cacti_graph_template_nginx_sockets_stat.xml

十六、常见问题与错误处理
1、400 bad request错误的原因和解决办法
配置nginx.conf相关设置如下.
client_header_buffer_size 16k;
large_client_header_buffers 4 64k;
根据具体情况调整,一般适当调整值就可以。

2、Nginx 502 Bad Gateway错误
proxy_next_upstream error timeout invalid_header http_500 http_503;
或者尝试设置:
large_client_header_buffers 4 32k;

3、Nginx出现的413 Request Entity Too Large错误
这个错误一般在上传文件的时候会出现,
编辑Nginx主配置文件Nginx.conf,找到http{}段,添加
client_max_body_size 10m; //设置多大根据自己的需求作调整.
如果运行php的话这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。
post_max_size = 10M
upload_max_filesize = 2M

4、解决504 Gateway Time-out(nginx)
遇到这个问题是在升级discuz论坛的时候遇到的
一般看来, 这种情况可能是由于nginx默认的fastcgi进程响应的缓冲区太小造成的, 这将导致fastcgi进程被挂起, 如果你的fastcgi服务对这个挂起处理的不好, 那么最后就极有可能导致504 Gateway Time-out
现在的网站, 尤其某些论坛有大量的回复和很多内容的, 一个页面甚至有几百K。
默认的fastcgi进程响应的缓冲区是8K, 我们可以设置大点
在nginx.conf里, 加入: fastcgi_buffers 8 128k
这表示设置fastcgi缓冲区为8×128k
当然如果您在进行某一项即时的操作, 可能需要nginx的超时参数调大点,例如设置成60秒:send_timeout 60;
只是调整了这两个参数, 结果就是没有再显示那个超时, 可以说效果不错, 但是也可能是由于其他的原因, 目前关于nginx的资料不是很多, 很多事情都需要长期的经验累计才有结果, 期待您的发现哈!

5、如何使用Nginx Proxy
朋友一台服务器运行tomcat 为8080端口,IP:192.168.1.2:8080,另一台机器IP:192.168.1.8. 朋友想通过访问http://192.168.1.8即可访问tomcat服务.配置如下:
在192.168.1.8的nginx.conf上配置如下:

  1. server {
  2. listen 80;
  3. server_name java.linuxtone.org
  4. location / {
  5. proxy_pass http://192.168.1.2:8080;
  6. include /usr/local/nginx/conf/proxy.conf;
  7. }
  8. }

复制代码

6、如何关闭Nginx的LOG
access_log /dev/null; error_log /dev/null;

十七、相关资源下载

1.nginx配置示例及脚本下载:
# wget http://www.linuxtone.org/lemp/scripts.tar.gz #此脚本范例定期更新.
【附】:
文档定期更新,同时欢迎朋友多提宝贵意见,丰富nginx tips内容.
最新的文档发布.请朋友们关注: http://bbs.linuxtone.org
——————————————————————————————————————

更详细的请下载 PDF文件阅读: 

  • Share/Save/Bookmark