yzwj2004 发表于 2018-11-9 11:38:50

详解Nginx的功能策略配置

  Nginx作为轻量级HTTP服务器,性能上占用资源少,支持多并发,功能上可以实现代理服务器可用于负载均衡,配置上简单灵活!将自己最近的文档整理一下,备以后使用,这里单从功能实现的基础配置上进行说明
  负载均衡(做分发服器)
  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 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模块,故编译添加
./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/24 bj;
  192.168.17.0/24 sh;   #定义bj和sh的IP段
  
}
  在server里添加loscation规则
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://192.168.1.241/1.jpg;#盗链访问重定向到的地址
  
}
  
}
  2、针对目录防止盗链
location /images/ {  alias /data/images/;
  valid_referers none blocked server_names *.xok.la xok.la ;
  if ($invalid_referer) {return 403;}
  
}
  还有就是可以通过ngx_http_accesskey_module模块实现防盗链,比较少用
  未完。。。


页: [1]
查看完整版本: 详解Nginx的功能策略配置