Nginx入门篇(六)之反向代理和负载均衡

  • 一、Nginx负载均衡集群 介绍

  负载均衡(Load Balance)集群提供了一种行之有效的办法,来扩展网络设备和服务器负载、带宽和吞吐量,同时加强了网络数据处理能力,提供了网络的灵活性和可用性。

  Nginx的负载均衡组件主要有2个:

ngx_http_proxy_module:proxy代理模块,用于把请求后端抛给服务器节点或upstream服务器池。

ngx_http_upstream_module:负载均衡模块,可以实现网站的负载均衡功能和几点的健康检查。

  • 二、实现一个简单的负载均衡

(1)环境介绍

    站点访问                    访问主页                    IP地址             角色
192.168.56.110:8081        welcome to bbs.abc.org        192.168.56.110        web1
192.168.56.111:8082        welcome to blog.abc.org       192.168.56.111        web2
www.abc.org                        无                     192.168.56.11        负载均衡

(2)配置bbs和blog站点并测试访问

[[email protected] vhosts]# vim bbs.abc.org.conf
server {
        listen 8081;
        server_name 192.168.56.110;
        root /vhosts/html/bbs;
        index index.html index.htm index.php;
}
[[email protected] vhosts]# vim blog.abc.org.conf
server {
        listen 8082;
        server_name 192.168.56.111;
        root /vhosts/html/blog;
        index index.html index.htm index.php;
}
[[email protected] vhosts]# curl 192.168.56.110:8081
welcome to bbs.abc.org
[[email protected] vhosts]# curl 192.168.56.111:8082
welcome to blog.abc.org

(3)配置负载均衡

[[email protected] vhosts]# cat www.abc.org.conf
upstream web_server{      //配置负载均衡池
    server 192.168.56.110:8081 weight=1;
    server 192.168.56.111:8082 weight=1;
}
server {
    listen 80;
    server_name www.abc.org abc.org;
    root /vhosts/html/www;
    index index.html index.php index.htm;

    access_log logs/www.abc.org_access.log main;
    error_log logs/www.abc.org_error.log info;    

    location /{
        proxy_pass http://web_server;  //反向代理到负载均衡池
    }

    location ~ \.php$ {
            root           /vhosts/html/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

}
[[email protected] vhosts]# nginx -t
nginx: the configuration file /usr/local/nginx1.15.1/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx1.15.1/conf/nginx.conf test is successful
[[email protected] vhosts]# nginx -s reload
[[email protected] vhosts]# curl www.abc.org  //测试访问是否实现轮询bbs和blog
welcome to bbs.abc.org
[[email protected] vhosts]# curl www.abc.org
welcome to blog.abc.org
[[email protected] vhosts]# curl www.abc.org
welcome to bbs.abc.org
[[email protected] vhosts]# curl www.abc.org
welcome to blog.abc.org
  • 三、Nginx负载均衡组件介绍

1、upstream模块

  Nginx的负载均衡功能依赖于ngx_http_upstream_module模块,可支持代理的方式有:proxy_pass、fastcgi_pass、memcached_pass等。该模块允许Nginx定义一组或多组节点服务器组,使用时,通过proxy_pass代理方式把网站的请求发送到实现定义好的upstream组的名称上,具体的格式为"proxy_pass http://web_server_pools",其中web_server_pools为upstream节点服务器组名称。下面举例说明:

upstream web_server{
    server 192.168.56.110:8081 weight=1 max_fails=1 fail_timeout=10s;
    server 192.168.56.111:8082 weight=1 max_fails=1 fail_timeout=10s;   server 192.168.56.112:8083 weight=1 max_fails=1 fail_timeout=10s backup;   server 192.168.56.113:8084 weight=1 max_fails=1 fail_timeout=10s down;
}

upstream参数说明:server 192.168.56.110:8081  表示的是负载均衡后端的RS配置,可以是IP或者域名,如果端口不写,默认为80端口,高并发场景下,IP可以换成域名,通过DNS做负载均衡weight=1  代表服务器的权重,默认为1。权重数字越大表示接受的请求比例越大max_fails=1  表示Nginx尝试连接后端主机失败的次数,这个值是配置proxy_next_upstream、fastcgi_next_upstream和memcached_next_upstream这3个参数使用,当Nginx接收后端服务器返回这3个参数定义的状态码时,会把这个请求转发给正常工作的后端RSfail_timeout=10s  在max_fails定义的的失败次数后,距离下一次检查的时间间隔,默认为10sbackup  热备配置(RS节点高可用)表示这个服务器作为备份服务器,当主服务器全部宕机,就会向这个服务器转发请求down  表示该服务器永远不可用,这个参数可以配合ip_hash使用

2、upstream的调度算法

  调度算法一般分为2类,一种是静态调度算法,例如:rr、wrr、ip_hash等,负载均衡器根据自身设定的规则进行分配,不考虑后端节点服务器的情况。

  一种是动态调度算法,例如least_conn、fair等,负载均衡器会根据后端节点服务器的当前状态来决定是否分发请求。

  (1)rr轮询(默认调度算法,静态调度算法)

  按客户端请求顺序依次将客户端的请求逐一分配到不同的后端服务器节点,和LVS的rr算法一样,如果后端节点服务器宕机,宕机的服务器会从服务器池中剔除,保证用户访问的正常。

  (2)wrr(权重轮询,静态调度算法)

  在rr轮询的基础上增加权重,使用该算法时,权重和用户访问成比例,权重越大,请求数越多。

  (3)ip_hash(静态调度算法)

  每个请求按照客户端的ip的hash结果分配,当新的请求到达,先将客户端IP通过哈希算法哈希出一个值,在随后的客户端请求中,客户的IP哈希值只要相同,就会被分配到同一台服务器上。该调度算法可以解决动态网页的session共享问题,但也会导致请求分配不均匀。需要注意的是当负载均衡调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能使用weight和backup,即使配置了也不会生效。

  (4)fair(动态调度算法)

  该算法会根据后端服务器的响应时间来分配请求,响应时间较短的有限分配。这种算法更加的智能,可以根据页面大小和加载时长智能地进行负载均衡。Nginx本身不支持fair调度算法,如果需要使用这种算法,需要下载Nginx的相关模块upstream_fair

  (5)least_conn

  该算法会根据后端节点的连接数来决定分配请求,哪个机器的连接数少就优先分配。

  (6)url_hash算法

  根据访问的URL的hash结果来分配请求,让每个URL定向到同一个后端服务器,后端服务器为缓存服务器时效果显著,可以提高后端缓存服务器的命中率。Nginx本身不支持这种算法,需要安装hash模块软件包。

3、http_proxy_module模块和参数

  proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器上,在实际的反向代理中,会通过location功能匹配指定的URI,然后把符合匹配规则的URI请求通过proxy_pass指向定义好的upstream池。

  http_proxy模块的相关参数:

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_buffers*2
proxy_temp_file_write_size    指定proxy缓存临时文件的大小

举个简单的反向代理的例子:

[[email protected] vhosts]# !vim
vim www.abc.org.conf
server {
        listen 80;
        server_name www.abc.org abc.org;
        root /vhosts/html/www;
        index index.html index.php index.htm;

        access_log logs/www.abc.org_access.log main;
        error_log logs/www.abc.org_error.log debug;
        location /bbs {    
                proxy_pass http://192.168.56.110:8081/;  //配置当访问www.abc.org/bbs时,反向代理到192.168.56.110:8081这台服务器上
        }

        location ~ \.php$ {
            root           /vhosts/html/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}
[[email protected] ~]# curl http://www.abc.org/bbs    //测试访问
welcome to bbs.abc.org

原文地址:https://www.cnblogs.com/linuxk/p/9342011.html

时间: 2024-10-22 00:48:42

Nginx入门篇(六)之反向代理和负载均衡的相关文章

Nginx安装、性能测试、反向代理、负载均衡实例

一.nginx安装 我使用的环境是64位 Ubuntu 14.04.nginx依赖以下模块: l gzip模块需要 zlib 库 l rewrite模块需要 pcre 库 l ssl 功能需要openssl库 1.1.安装pcre l 获取pcre编译安装包,在http://www.pcre.org/上可以获取当前最新的版本 l 解压缩pcre-xx.tar.gz包. l 进入解压缩目录,执行./configure. l make & make install 1.2.安装openssl l 获

基于nginx和tengine的tcp反向代理,负载均衡 安装和配置

先下载nginx_tcp_proxy_module模块. wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip 先看看自己原来nginx安装有哪些模块(编译参数): [[email protected]]# /tengine/sbin/nginx -VTengine version: Tengine/2.1.1 (nginx/1.6.2)built by gcc 4.4.7 20120313 (Re

nginx 防盗链+动静分离+反向代理+缓存+负载均衡

修改nginx/conf/nginx.conf,修改完后如下: user www www; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default

nginx 防盗链+动静分离+反向代理+缓存+负载均衡 (转发)

修改nginx/conf/nginx.conf,修改完后如下: [php] view plaincopyprint? user  www www; worker_processes  1; #error_log  logs/error.log; #error_log  logs/error.log  notice; #error_log  logs/error.log  info; #pid        logs/nginx.pid; events { worker_connections 

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

nginx反向代理相关 负载均衡

一.反向代理 1.1.upstream简介 nginx的upstream可以同时实现反向代理和负载均衡,目前upstream支持4种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. 2.ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题. 3.fair(第三方) 按后端服

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

[转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin