负载均衡(做分发服器)
1、基于浏览器的分发
基于浏览器的分发,按照在不同平台的浏览器请求进行分发,比如手机浏览器讲究资源小速度快节省流量,所以将自手机浏览器的请求分发到专供处理移动平台的web服务器上,而在PC上浏览网页注重体验,所以将来自IE浏览器的请求分发到专供处理PC平台的服务器上,这样可以使在不同平台的用户都能得到适合自己的体验!
添加多个upstream
vim /usr/local/nginx/conf/nginx.con
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 ; #来自Elinks浏览器的请求,交给web来处理
}
if( $http_user_agent ~* Mozilla ) {
proxy_pass ;
#来自Mozilla类型的浏览器的请求,交给apache处理,IE和火狐都属于Mozilla
}
}
}
2、基于开发语言的分发
这里开发语言环境的部署,祥看我这篇文章“”
常见开发语言的后缀aspaspx php jsp html,为了将不同语言开发的程序交给特定的语言环境来执行,同样可以实现Nginx的location规则来实现
同样定义server时进行location规则判断
location~* \.php$ {
proxy_pass ; #访问php结尾的,分发到250
}
location ~* \.jsp$ {
proxy_pass ; #访问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 {
default default;
192.168.18.0/24bj;
192.168.17.0/24sh; #定义bj和sh的IP段
}
在server里添加loscation规则
123 location/ {
proxy_pass $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 ; #协议,模块名
}
}
我在定义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 ^/ ; #盗链访问重定向到的地址
#return 403;
}
}