Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65560
  • 博文数量: 16
  • 博客积分: 298
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-30 06:11
文章分类
文章存档

2013年(1)

2011年(15)

分类: 系统运维

2011-08-07 14:58:36

使用第三方负载均衡模式(upstream fair module):
[root@puppet ~]# wget
[root@puppet ~]# tar zxvf master
gnosek-nginx-upstream-fair-2131c73/
gnosek-nginx-upstream-fair-2131c73/.gdbinit
gnosek-nginx-upstream-fair-2131c73/README
gnosek-nginx-upstream-fair-2131c73/config
gnosek-nginx-upstream-fair-2131c73/ngx_http_upstream_fair_module.c

隐藏版本号:
在nginx.conf:  http 添加 server_tokens off;

Nginx编译参数:./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_perl_module --with-http_stub_status_module --add-module=../gnosek-nginx-upstream-fair-2131c73
[root@puppet nginx-1.0.6]# make && make install
example:
upstream backend  {
  server backend1.example1.com;
  server backend2.example1.com;
  server backend3.example1.com;
  fair no_rr;  --最少连接数服务器获得请求;(fail, fail on_rr, weight_mode=idle no_rr, weight_mode=peak)
}

rewrite module:
1)一个网站叫。早前有一个/blog/test-post.html页面,现在它已经重做。新的博客有一个不同的URL地址,这个旧的文章是在以下位置:/blog/test-post/。它可能看起来像一个简单的变化,但书签的用户访问一个旧旧的URL时,他们会得到一个404错误页面。下面的配置更改会轻易放过你重写旧到新的网址:
server {
 server_name
 ...
 rewrite ^/blog/test-post.html$ /blog/test-post/ permanent;  --301 永久重定向;去掉permanent参数;变成302临时重定向(搜索爬虫不会记录更新);
 location ~ .php$ {
  ...
 }
 
2)在重写中使用浏览代理:
location / {
 ...
 if($http_user_agent ~* '(iphone|ipod)') {
   set $iphone_request '1';
 }
 if($iphone_request = '1') {
   rewrite ^.+
 }
}


3)错误页面跳转:
error_page 403 404 /errors/404.html
location /errors/ [
 alias /usr/local/www/html/errors/;
 internal;
}

4)如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream 负载均衡池中的另一台服务器,实现故障转移:
location / {
  proxy_next_pustream http_502 http_504 error timeout invalid_header;
  proxy_pass
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $remote_addr;
}


访问限制(NginxHttpLimitZoneModule and NginxHttpLimitReqModule):
NginxhttpLimitZoneModule可以根据条件进行并发连接数限制;
example:
http {
 limit_zone my_zone $binary_remote_addr 10m;
 
 server {
   location / {
     limit_conn my_zone 1;
   }
 }
}
NginxHttpLimitReqModule可以根据条件进行请求频率的控制;
example:
http{
 limit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s;
 ...
 server {
   location / {
    limit_req_zone zone=my_req_zone burst=2;  --最高每秒2个突发请求
   }
 }
}
&根据特征码屏蔽请求(对CC攻击效果较好)
一般同一种CC攻击工具发起的攻击请求包总是相同的,而且和正常请求有所差异。
当服务器遭遇CC攻击时,我们可以快速查看日志,分析其请求的特征,比如User-agent。下面的是某一次CC攻击时的User-agent
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate
几乎没有正常的浏览器会在User-agent中带上“must-revalidate”这样的关键字。所以我们可以以这个为特征进行过滤,将User-agent中带有“must-revalidate”的请求全部拒绝访问:
if ($http_user_agent ~ must-revalidate) {
  return 403;
}
设置nginx expires和access_log提升网站访问速度
在一个网站中往往图片,css文件,js文件会占用掉大量的带宽和载入时间.采用nginx做前端服务器可以设置类似的静态文件客户端的缓存时间.比如:
location ~ \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
expires 30d;
access_log off;
}
就可以将类似静态文件的客户端缓存时间设置为30天,意味着客户在30天内重新访问这些文件时只需要在本地缓存中读取,而不用重新从服务器获取.这样页面载入速度就大大提高了.
当然,对于这些静态文件的访问记录计入日志,在一般情况下也是没有意义的,将accss_log设为off,能在一定程度上降低服务器压力.
阅读(1965) | 评论(0) | 转发(0) |
0

上一篇:puppet 源码安装

下一篇:tomcat学习笔记

给主人留下些什么吧!~~