负载均衡(做分发服器)
1、基于浏览器的分发
基于浏览器的分发,按照在不同平台的浏览器请求进行分发,比如手机浏览器讲究资源小速度快节省流量,所以将自手机浏览器的请求分发到专供处理移动平台的web服务器上,而在PC上浏览网页注重体验,所以将来自IE浏览器的请求分发到专供处理PC平台的服务器上,这样可以使在不同平台的用户都能得到适合自己的体验!
添加多个upstream
vim /usr/local/nginx/conf/nginx.conf

upstream web {
ip_hash;
server 192.168.1.10
}
upstream apache {
ip_hash;
server 192.168.1.11
} // 在定义server的时进行location规则判断 server {
listen 80;
server_name 192.168.1.100; // (分发主机)
location / {
if ($http_user_agent~ * Elinks) {
proxy_pass http : //web; 来自Elinks浏览器的请求,交给web来处理
}
if ($http_user_agent~ * Mozilla) {
proxy_pass http : //apache; 来自Mozilla类型的浏览器的请求,交给apache处理,IE和火狐都属于Mozilla
}
}
}

2、基于开发语言的分发
这里开发语言环境的部署,祥看我这篇文章“http://cuimk.blog.51cto.com/6649029/1335770”
常见开发语言的后缀aspaspx php jsp html,为了将不同语言开发的程序交给特定的语言环境来执行,同样可以实现Nginx的location规则来实现
同样定义server时进行location规则判断

location~ *  \ .php$ {
proxy_pass http : //192.168.1.250; #访问php结尾的,分发到250
}
location~ * \ .jsp$ {
proxy_pass http : //192.168.1.251; #访问jsp结尾的,分发到251
}
location / {
root html
index index.html; // 访问其他的,请求本机
}

3、基于源地址的分发
像联通移动的网站,进去之后可以看到,你所进入的页面是你所在城市的页面,里面的信息很多是你当地退出的一些活动,这就是他们根绝你的IP地址来得知你当前所在位置,然后将请求分发到对应的服务器所实现的。
首先Nginx需要geoip模块,故编译添加
1 ./configure–with-http_geoip_module

首先定义多个upstream

upstream bj.server {
ip_hash;
server 192.168.1.251 //定义bj的IP访问的服务器
}
upstream sh.server {
ip_hash;
server192.168.1.251 //定义sh的IP访问的服务器
}
upstream default.server {
ip_hash;
server 192.168.1.100 //定义其他地区访问的服务器
} //定义一个IP库 geo$geo {
defaultdefault;
192.168.18.0 / 24bj;
192.168.17.0 / 24sh; //定义bj和sh的IP段
} //在server里添加loscation规则 123 location / {
proxy_pass http : //$geo.server$request_uri
}

这样会对不同的IP匹配IP库,看其属于哪个地区,然后在有针对性的将请求分发

4、基本IP轮询分发
配置十分简单,以两台RS做实验
将RS定义在一个upstream内

vim /usr/local/nginx/conf/nginx.conf

upstream web {
ip_hash;
server 192.168.18.250;
server 192.168.18.251; //两台RS
} //在定义server的时候来指定其访问的模块,有多台机器的会默认轮询访问,当然可以自定义访问权重。 server {
listen 80; //监听80端口
server_name localhost; //域名
location / {
proxy_pass http : //web; //协议,模块名
}
}

我在定义upstream的时候都添加了一句“ip_hash;”这里是算法,使用ip哈希的算法,让来自同一台的清楚只交给后端同一台RS来处理.
配置限速
限速也是通过location规则实现的

首先需要在http里指定最大带宽(比如说是10M)

limit_zoneone $binary_remote_addr    10M;

然后在server添加location规则

location / {
root html;
index index.html index.htm;
limit_rate 10k; //限速多少
limit_rate_after 100k; //下载多少的时候开始限速
limit_connone 2; //同一IP同时只能下载两个
}

防盗链配置

防盗链原理也是通过location规则实现的
1、指定文件的防盗链

location~ * .(gif | jpg | png | swf | flv)$ { //针对哪些文件格式进行防盗链
root / usr / local / nginx / html;
valid_referersnone blocked baidu.com; //只允许baidu连接
if ($invalid_referer) {
rewrite^ / http : //www.linuxidc.com/retrun.html; //盗链访问重定向到的地址
return 403;
}
}

第一行:gif|jpg|png|swf|flv 
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链 
第二行: 表示对www.88181.com这2个来路进行判断 
if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.linuxidc.com/retrun.html页面,当然直接返回403也是可以的。

2、针对目录防止盗链

12345 location / images / {
alias / data / images / ;
valid_referers none blocked server_names * .xok.la xok.la;
if ($invalid_referer) {
return403;
}
}

3. 通过ngx_http_accesskey_module模块实现防盗链,比较少用
实现方法如下:
1. 下载NginxHttpAccessKeyModule模块文件:Nginx-accesskey-2.0.3.tar.gz;
2. 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”;
3. 用一下参数重新编译nginx:
./configure --add-module=path/to/nginx-accesskey
4. 修改nginx的conf文件,添加以下几行:

location / download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}

其中:
accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。

访问测试脚本download.php:
<?
$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);
$output_add_key="<a href=http://www.linuxidc.com/download/G3200507120520LM.rar?key=".$ipkey.">download_add_key</a><br />";
$output_org_url="<a href=http://www.linuxidc.com/download/G3200507120520LM.rar>download_org_path</a><br />";
echo $output_add_key;
echo $output_org_url;
?>
访问第一个download_add_key链接可以正常下载,第二个链接download_org_path会返回403 Forbidden错误。

他的运行方式是:如我的download 目录下有一个 file.zip 的文件。对应的URI 是http://www.linuxidc.com/download/file.zip
使用ngx_http_accesskey_module 模块后http://www.linuxidc.com/download/file.zip?key=09093abeac094. 只有给定的key值正确了,才能够下载download目录下的file.zip。而且 key 值是根据用户的IP有关的,这样就可以避免被盗链了。

example:

upstream nodejs{
server 192.168.189.131:;
server 192.168.189.133:;
} server {
listen ;
server_name localhost; location / {
proxy_pass http://nodejs; #Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size ;
proxy_connect_timeout ;
proxy_send_timeout ;
proxy_read_timeout ;
proxy_buffer_size 4k;
proxy_buffers 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
#root /usr/share/nginx/html;
#index index.html index.htm;
}
....
....
}

Nginx负载均衡的更多相关文章

  1. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  2. nginx负载均衡集群

    nginx负载均衡集群  0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对 ...

  3. 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统

    引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...

  4. nginx负载均衡基于ip_hash的session粘帖

    nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...

  5. Net分布式系统之二:CentOS系统搭建Nginx负载均衡

    一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat ...

  6. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  7. 配置nginx负载均衡

    配置nginx负载均衡 执行命令:vi /usr/local/nginx/sbin/nginx/conf/nginx.conf 修改为: worker_processes  2; events {   ...

  8. 烂泥:nginx负载均衡

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天我们来学习下有关nginx的负载均衡配置.nginx的负载均衡是通过nginx的upstream模块和proxy_pass反向代理来实现的. 说明: ...

  9. nginx负载均衡集群中的session共享说明

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  10. nginx 负载均衡策略

    nginx 负载均衡策略   1. 轮询轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如:upstream backend {server backend1.e ...

随机推荐

  1. 关于svg格式图片颜色更改

    利用 style="fill:#8a8acb" 放在path标签下面. 技巧:比如一个svg是一个圆圈内包含一个问号,问号内填充白色,圆圈内,问号外,填充其他颜色,如蓝色.可 设置 ...

  2. Thinking in java学习笔记之map的应用

    Random rand = new Random(47); Map<Integer,Integer> m = new HashMap<Integer,Integer>(); f ...

  3. java并发编程实战(java concurrency in practice)

    第一章   线程共享进程范围内的资源,但每个线程都有各自的程序计数器.栈以及局部变量等. 多个线程可以同时调度到多个CPU上运行.   线程的优势? 在服务应用程序中,可以提升资源利用率以及系统吞吐率 ...

  4. 【转】PHOTOSHOP常用快捷键大全

    PHOTOSHOP常用快捷键大全 一.文件新建 CTRL+N打开 CTRL+O 打开为 ALT+CTRL+O关闭 CTRL+W保存 CTRL+S 另存为 CTRL+SHIFT+S另存为网页格式 CTR ...

  5. SourceTree推送时,增加额外的远程仓库,不用每次都自定义粘贴复制网络

    一.命令行添加 二.软件界面可以查看到结果 更新,以上是代码添加了远程仓库,最近,找到了不用代码,直接在文件夹里写地址来添加的方式.直接上图了.

  6. php多进程总结

    本文部分来自网络参考,部分自己总结,由于一直保存在笔记中,并没有记录参考文章地址,如有侵权请通知删除.最近快被业务整疯了,这个等抽时间还需要好好的整理一番.   多进程--fork 场景:日常任务中, ...

  7. 基于 BinaryReader 的高效切割TXT文件

    日常工作中免不了要面对一些文件的操作.. 但是如果是日志文件..动辄上G的..处理起来就不那么轻松随意了.. 尤其文件还很多的时候.. 这个时候就会用到大文件切割.. 下边贴出的示例是实验了一个 10 ...

  8. asp.net中套用母版页之后的findcontrol

    套用模板页之后,如果要在内容页中查找某个控件,需要先找到模板页中的ContentPlaceHolder,在通过ContentPlaceHolder查找代码,如下: LinkButton btn = t ...

  9. C语言基础(4)-原码,反码,补码及sizeof关键字

    1. 原码 +7的原码是0000 0111 -7的原码是1000 0111 +0的原码是0000 0000 -0的原码是1000 0000 2. 反码 一个数如果值为正,那么反码和原码相同. 一个数如 ...

  10. JS正则检测密码强度

    今天遇到个需求,使用JS检测密码强度:密码长度最短为8,必须同时包含字母.数字.特殊符号. 代码如下: /*         * 检测密码复杂度         */         function ...