NGINX介绍

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行

其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
实现Nginx负载均衡的组件主要有两个:

ngx_http_proxy_module proxy     代理模块,用于把请求后抛给服务器节点或upstream服务器池
ngx_http_upstream_module        负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查

upstream模块

upstream模块允许Nginx定义一组或多组节点服务器组,使用时可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上,

具体写法为:proxy_pass http://syaving;
其中syaving就是一个upstream节点服务器组名字,例如

upstream syaving {
          server  weight=  max_fails= fail_timeout=10s;
          server  weight=  max_fails= fail_timeout=10s;
          server  weight=  max_fails= fail_timeout=10s;
}

server {
            listen ;
            server_name www.syaving.com;
            access_log /data/logs/nginx/xtapi_accese.log combined;

   location / {
            proxy_pass http://syaving;
            include    proxy.conf;
            }
}

配置说明:

  • upstream模块的内容应放于nginx.conf配置的http标签内,默认调度节点算法是wrr(权重轮询,weighted round-robin)
  • server:负载均衡后面的rs配置,可以是ip或域名
  • weight:服务器的权重,默认值为1,越大表示接受的请求比例越大
  • max_fails:nginx尝试连接后端主机失败的次数,这个数值是配合proxy_net_upstream,fastcgi_next_upstream和memcached_next_upstream这三个参数来使用的,当nginx接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404,502,503 backup:热备配置(rs节点的高可用),当前面激活的rs都失败后会自动启动用热备rs,这标志着这个服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求;当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup
  • fail_timeout:在max_fails定义的失败次数后,距离下次检查的时间间隔,默认10s
  • down:表示服务器永远不可用,可配合ip_hash使用

upstream模块调度算法
调度算法一般分为两类:
第一类为静态调度算法,即负载均衡器根据自身设定的规则进行分配,不需要考虑后端节点服务器的情况,例如rr,wrr,ip_hash等

第二类为动态调度算法,即负载均衡器会根据后端节点的当前状态来决定是否分发请求,例如:连接数少的优先获的请求,响应时间短的优先获得请求,例如:least_conn,fair等

常见的调度算法
rr轮询:round-robin,默认调度算法,静态调度算法,按照客户端请求顺序逐一分配到不同的后端节点服务器,宕机的服务器会被自动从节点服务器池中剔除。

rr权重轮询:静态调度算法,在rr轮询算法的基础上加上权重,权重和用户访问成正比,权重值越大,被转发的请求也就越多

ip_hash:静态调度算法,每个请求按客户端IP的Hash值分配,当新的请求到达时,先将其客户端IP通过哈希算法计算出一个值,在随后的客户端请求中,客户端IP的哈希值只要相同,就会被分配到同一台服务器,可以解决动态网页的session共享问题,但也会引起分配不均的弊端

fair:动态调度算法,此算法会根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配,可以依据页面大小和加载时间舱段智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。需要下载Nginx的相关模块upstream_fair

least_conn:根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发

url_hash:根据访问URL的hash结果来分配请求的,让每个URL定向到同一个后端服务器,后端服务器为缓存服务器时效果显著,如果需要使用这种调度算法,必须安装Nginx的hash模块软件包

一致性hash:一般用于代理后端业务为缓存服务(squid,memcached)的场景,通过将用户请求的uri或者指定字符串进行计算,然后调度到后端的服务器上,此后任何用户查找同一个uri或者指定字符串都会被调度到这一台服务器上,因此后端的每个节点缓存的内容都是不同的,一致性hash算法可以解决后端某个或者几个节点宕机后,缓存的数据动荡最小

http_proxy_module模块

proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器,在实际的反向代理工作中,会通过location功能匹配指定的uri,然后把接收到的符合匹配URI的请求通过proxy_pass抛给定义好的upstream节点池
简单配置实例

   location / {
            proxy_pass http://10.0.0.1:8080;
            include    proxy.conf; #这里我把所有的proxy放到一个文件里面进行include调用,下面有介绍
            }

模块参数
proxy_set_header:设置http请求header项传给后端服务器节点,例如,可以实现让代理后端的服务器节点获取访问客户端用户真实的IP地址
client_body_buffer_size:用于指定客户端请求主题缓冲区大小
proxy_connect_timeout:表示反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间
proxy_send_timeout:表示代理后端服务器的数据回传时间,即在规定时间之内,后端服务器必须传完所有的数据,否则,nginx将断开这个连接
proxy_read_timeout:设置nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是nginx已经后端的排队之中等候处理的时间
proxy_buffer_size:设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置的大小
proxy_buffers:设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息,会放置在缓冲区
proxy_busy_buffers_size:用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐的大小为proxy_bufer*2
proxy_temp_file_write_size:指定proxy缓存临时文件的大小

proxy.conf文件如下

proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;    #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;                  #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k;                 #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout   ;                  #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout      ;                   #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout      ;                   #连接成功后,后端服务器响应时间(代理接收超时)
proxy_next_upstream    http_502 http_504 http_404 error timeout invalid_header;
proxy_buffer_size       4k;            #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers            32k;         #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k;           #高负荷下缓冲大小(proxy_buffers*)
proxy_temp_file_write_size 64k;        #设定缓存文件夹大小,大于这个值,将从upstream服务器传

#proxy_cache cache;
#proxy_cache_valid   1h;
#proxy_cache_valid  1m;
#proxy_cache_key $uri$is_args$args;
#add_header  Nginx-Cache "$upstream_cache_status";

#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "Upgrade";

Nginx系列之负载均衡和反响代理的更多相关文章

  1. nginx的负载均衡和反响代理配置

    4.        负载均衡配置 nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 另外 ...

  2. Nginx反向代理服务器、负载均衡和正向代理

    Nginx("engine x")是一个高性能的 HTTP 和反向代理服务器,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日.官方测试 nginx 能够支撑5万 ...

  3. CentOS中实现Nginx负载均衡和反向代理

    一.安装必要软件 负载均衡服务器:IP设置为192.168.1.10 Web服务器1:安装Apache或者Nginx,IP设置为192.168.1.11: Web服务器2:安装Apache或者Ngin ...

  4. nginx负载均衡和反向代理有什么区别

    近在研究nginx的负载均衡和反向代理,先看下这两个简单的配置吧! 负载均衡 worker_processes 1; events { worker_connections 1024; } http{ ...

  5. Nginx 负载均衡和反向代理实践

    nginx 以哪个配置文件启动 Nginx 负载均衡和反向代理实践 环境介绍 192.168.1.50    在这台主机上配置Nginx 的反向代理,负载均衡,和web1,web1使用的81号端口 1 ...

  6. Nginx(六):Nginx HTTP负载均衡和反向代理的配置与优化

    一.什么是负载均衡和反向代理 随着网站访问量的快速增长,单台服务器已经无法承担大量用户的并发访问,必须釆用多台服务器协同工作,以提高计算机系统的处理能力和计算强度,满足当前业务量的需求.而如何在完成同 ...

  7. 【架构师之路】Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》

    本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用 ...

  8. Nginx服务器部署 负载均衡 反向代理

    Nginx服务器部署负载均衡反向代理 LVS Nginx HAProxy的优缺点 三种负载均衡器的优缺点说明如下: LVS的优点: 1.抗负载能力强.工作在第4层仅作分发之用,没有流量的产生,这个特点 ...

  9. Nginx可以说是标配组件,但是主要场景还是负载均衡、反向代理、代理缓存、限流等场景;而把Nginx作为一个Web容器使用的还不是那么广泛。

    Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛. 用Nginx+Lua(OpenResty)开发高性能Web ...

随机推荐

  1. JavaScript中的bind方法及其常见应用

    一.bind()方法的实现 在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用.就拿最常见的console.log("info…")来说,避免书写 ...

  2. Java笔记7:最简单的网络请求Demo

    一.服务器端 1 新建一个工程,建立一个名为MyRequest的工程. 2 FileàProject StructureàModulesà点击最右侧的“+”àLibraryàJava 找到Tomcat ...

  3. Netty4 initAndRegister 解析

    我们从框架的应用层面来分析,NioEventLoopGroup在netty中的使用. 这是我们需要配置的地方. 紧接着我们进入netty的运行中.ServerBootstrap.bind(PORT); ...

  4. 微信小程序flex容器属性详解

    flex容器属性详解 flex-direction决定元素的排列方向 flex-wrap决定元素如何换行 flex-flow 是 flex-direction 和flex-wrap的简写 justif ...

  5. INSTALL_FAILED_OLDER_SDK

    Uploading file local path: /Users/Rubert/Android/workspace/MyApplication/app/build/outputs/apk/app-d ...

  6. 【BIEE】19_不齐整维和越级维

    不齐整维:没有子节点的维度 越级维:层级维度出现断裂,则称为越级维 下图我们就可以清晰的看出: 首先,我们将表导入到资料库做好与事实表的关联后并建立相应维 以下是按照一般维度创建维后的结果 创建完成之 ...

  7. JavaScript | 基础(变量/引用/转换/函数)

    ———————————————————————————————————————————— 变量 全局变量:在函数体外声明,全局可以使用 局部变量:通过关键字var来声明 变量类型 <script ...

  8. jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)

    转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html 性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景.因而 ...

  9. asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(三)—— 简单登录页面+sqlite+动软代码生成器的使用

    上一节讲到利用easyui的layout.tree.tab和datagrid创建用户管理的页面,注意利用到easyui的页面一定要按顺序添加jQuery和easyUI的.js和.css样式,灵活查看e ...

  10. 【精】iOS GCD 具体解释

    一.介绍 1.什么是GCD? Grand Central Dispatch.是苹果公司开发的一套多核编程的底层API. GCD首次公布在Mac OS X 10.6,iOS4及以上也可用.GCD存在于l ...