likes
comments
collection
share

nginx(一)nginx配置反向代理与负载均衡

作者站长头像
站长
· 阅读数 40

最近在研究秒杀程序的设计及服务器配置。

涉及到秒杀这个问题,那肯定就意味着大流量高并发访问,那么大概率我们需要做反向代理与负载均衡配置。

那么如何配置nginx的反响代理与负载均衡呢?

  一:配置服务器环境

首先,我们大概需要准备三台服务器

一台做反向代理,剩下的两台做负载均衡的演示。

反向代理服务器只需要配置nginx环境即可,因为,其只做为请求转发的中转站。

两台负载均衡服务器,需要配置lnmp环境,具体配置过程请移步《Centos7.6配置lnmp

上边的方法是属于有那个条件的同学使用,正常一台服务器也行,在服务器上配置nginx和apache,nginx做反向代理,将请求转发至apache即可。

Lamp环境配置,请移步《LAMP环境配置及NGINX安装

二:负载均衡配置实例

下面我先放一下我测试使用的一个nginx配置示例,具体的配置项下边会有一个大概的解释:

http{
    # 配置负载均衡
    # 这里的域名要和下面proxy_pass的一样
    upstream  guanchao.site {   
        # 将请求分配至最小链接
        least_conn;
        # 每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。     
        # ip_hash;
        # weigth参数表示权值,权值越高被分配到的几率越大
        # 下面表示219.44有2分之1几率,132.2有2分之1几率
        server    47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1
        server    8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1
    #     server    111.231.162.140:80 max_fails=2 fail_timeout=5s weight=1; 
    }     
 
    server {  
        listen       80
        server_name  guanchao.site;  
 
        location / {  
            # 配置负载均衡
            proxy_pass http://guanchao.site;  #请求转向taishan定义的服务器列表
            proxy_set_header Host $host;#将请求头转发给后端服务器
            proxy_set_header X-Forward-For $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_connect_timeout 2s; 最长链接时间为2s
            proxy_redirect default;  
        }  
 
        error_page   500 502 503 504  /50x.html;  
        location = /50x.html {  
            root   html;  
        }  
    }
}

111.231.162.140这个服务器作为反向代理服务器

47.100.219.44与8.140.132.2这两台服务器作为负载均衡服务器

以上的配置得到的效果:

nginx(一)nginx配置反向代理与负载均衡

nginx(一)nginx配置反向代理与负载均衡

我们可以看到,在同一个域名下,多次刷新,我们看到的页面是不同的,因此,证明我们上边的反向代理及负载均衡的配置是没有问题的。

三:负载均衡策略

1:轮询

这种是默认的策略,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。

    # 配置负载均衡
    # 这里的域名要和下面proxy_pass的一样
    upstream  guanchao.site {   
        # weigth参数表示权值,权值越高被分配到的几率越大
        # 下面表示44有2分之1几率,2有2分之1几率
        server    47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1
        server    8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1
    }

2:最少链接

    # 配置负载均衡
    # 这里的域名要和下面proxy_pass的一样
    upstream  guanchao.site {   
        # 将请求分配至最小链接
        least_conn;
        # weigth参数表示权值,权值越高被分配到的几率越大
        # 下面表示44有2分之1几率,2有2分之1几率
        server    47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1
        server    8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1
    }

3:权重weight

    # 配置负载均衡
    # 这里的域名要和下面proxy_pass的一样
    upstream  guanchao.site {   
        server    47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1
        server    8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1
    }

4:ip_hash

每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。

    # 配置负载均衡
    # 这里的域名要和下面proxy_pass的一样
    upstream  guanchao.site {   
        # 每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。     
        ip_hash;
        # weigth参数表示权值,权值越高被分配到的几率越大
        # 下面表示44有2分之1几率,2有2分之1几率
        server    47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1
        server    8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1
    }

 

以上四个策略可以组合叠加使用。

剩下配置的用处,我在nginx配置实例中都有备注。

四:其他参数

参数列表如下:

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

以上大概就是nginx的反响代理与负载均衡的配置,

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

转载自:https://juejin.cn/post/7113714684410200100
评论
请登录