使用第三方负载均衡模式(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,能在一定程度上降低服务器压力.
阅读(1959) | 评论(0) | 转发(0) |