nginx 小流量架构

小流量主体架构

二、Nginx配置

1、怎样进行分流

location 

  • 匹配url

rewrite_by_lua_file '$app_dir/core/diversion/diversion.lua'

  • 通过diversion.lua来确定backend节点

proxy_pass http://$backend

  • 反向代理到backend服务器

2、upstream负载均衡

负载均衡策略:

  • round-robin(默认)
  • ip_hash(访问ip):每个访客固定访问一个后端服务器
  • fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
  • url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
  • least_conn:将请求发送到「活跃连接数最少」的那台服务器。
  • 快者优先:优先使用「响应时间最短」的后端服务。

服务节点的状态值:

  • down 表示单前的server暂时不参与负载.
  • weight 默认为1.weight越大,负载的权重就越大。
  • max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
  • fail_timeout : max_fails次失败后,暂停的时间。
  • backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

keepalive(俗称长连接):

  • 默认情况下启动短连接,即请求结束后回收此连接
  • keepalive 指定的数值是连接池中空闲的连接的最大数量,当连接数量达到这个值的时候,后续建立的连接不会被缓存(在使用完之后,就会关闭)。
  • 需要注意的点是,keepalive指令不会限制nginx worker进程到upstream服务器的连接的总数。

3、配置的结构

  • main全局配置
  • http服务器
    • server虚拟主机
      • location
  • upstream

其中,server会继承main和http,location继承server,而upstream既不会继承指令也不会被继承。

三、Nginx-Lua分流策略

四、Nginx配置与Lua的执行顺序

nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系。

Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是:
post-read、server-rewrite、find-config、rewrite、post-rewrite、 preaccess、access、post-access、try-files、content、log。

 

例子:

set 指令就是在 rewrite 阶段运行的,而 echo 指令就只会在 content 阶段运行。

在单个请求的处理过程中,rewrite 阶段总是在 content 阶段之前执行,因此属于 rewrite 阶段的配置指令也总是会无条件地在 content 阶段的配置指令之前执行。于是在同一个 location 配置块中,set 指令总是会在 echo 指令之前执行,即使我们在配置文件中有意把 set 语句写在 echo 语句的后面。

 

rewrite_by_lua_file

语境:http、server、location、location if

阶段:rewrite

作为rewrite阶段的处理,为每个请求执行指定的lua代码。

 

各阶段的解释:

1、post-read

读取请求内容阶段,nginx读取并解析完请求头之后就立即开始运行;

2、server-rewrite

server请求地址重写阶段;

3、find-config

配置查找阶段,用来完成当前请求与location配重块之间的配对工作;

4、rewrite

location请求地址重写阶段,当ngx_rewrite指令用于location中,就是再这个阶段运行的;

5、post-rewrite

请求地址重写提交阶段,当nginx完成rewrite阶段所要求的内部跳转动作,如果rewrite阶段有这个要求的话;

6、preaccess

访问权限检查准备阶段,ngx_limit_req和ngx_limit_zone在这个阶段运行,ngx_limit_req可以控制请求的访问频率,ngx_limit_zone可以控制访问的并发度;

7、access

权限检查阶段,ngx_access在这个阶段运行,配置指令多是执行访问控制相关的任务,如检查用户的访问权限,检查用户的来源IP是否合法;

8、post-access

访问权限检查提交阶段;

9、try-files

配置项try_files处理阶段;

10、content

内容产生阶段,是所有请求处理阶段中最为重要的阶段,因为这个阶段的指令通常是用来生成HTTP响应内容的;

11、log

日志模块处理阶段;

 

 

参考文章:

http://blog.csdn.net/weiyuefei/article/details/38487475

https://blog.jamespan.me/2015/11/27/fastest-first-load-balancer-for-nginx-with-lua

http://timd.cn/2016/01/04/nginx-upstream-keepalive/

http://blog.sina.com.cn/s/blog_e59371cc0102ux5w.html

http://blog.sina.com.cn/s/blog_6d579ff40100xm7t.html

http://www.jianshu.com/p/1bb7814b4b88

小知识:

lua_shared_dict:共享内存字典项,对所有worker进程可见。

反向代理(Reverse Proxy)方式是指用代理服务器来接受internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值