Nginx系列-11.配置Nginx反向代理和负载均衡

Nginx系列-11.配置Nginx反向代理和负载均衡

目录 - Nginx系列

Nginx系列-1.Linux下安装Nginx
Nginx系列-2.配置LNMP(Linux、Nginx、MySQL、PHP)架构
Nginx系列-3.配置Nginx虚拟主机
Nginx系列-4.Nginx日志配置及日志切割
Nginx系列-5.配置Nginx的防盗链
Nginx系列-6.配置Nginx的HTTPS
Nginx系列-7.配置Nginx使用uwsgi支持web.py框架
Nginx系列-8.配置Nginx+Apache实现动静分离
Nginx系列-9.配置NFS实现Nginx实现动静分离
Nginx系列-10.采用Nginx搭建正向代理服务
Nginx系列-11.配置Nginx反向代理和负载均衡


实验环境
三台最小化的 CentOS 7.3 虚拟机
server1-ip: 192.168.204.133
server2-ip: 192.168.204.134
server3-ip: 192.168.204.135

实验拓扑
Nginx系列-11.配置Nginx反向代理和负载均衡

一、server1 安装 nginx

  1. 安装nginx

    yum install -y epel-*
    yum install -y nginx vim

    Nginx系列-11.配置Nginx反向代理和负载均衡

  2. 关闭防火墙

    setenforce 0
    systemctl stop firewalld
    systemctl disable firewalld

    Nginx系列-11.配置Nginx反向代理和负载均衡

  3. 编辑nginx配置文件,删除或注释主配置文件中的server
    vim /etc/nginx/nginx.conf

    删除或注释主配置文件中的server块,以排除实验中的意外影响
    Nginx系列-11.配置Nginx反向代理和负载均衡

二、server2/server3 同时安装 Apache 和 PHP

  1. 安装Apache和PHP

    yum install -y httpd php

    Nginx系列-11.配置Nginx反向代理和负载均衡

  2. 关闭防火墙
    setenforce 0
    systemctl stop firewalld
    systemctl disable firewalld

    Nginx系列-11.配置Nginx反向代理和负载均衡

三、server2/server3同时配置web服务

  1. server2建立主页文件,并启动Apache

    cd /var/www/html
    echo -e "Server2" >> index.html
    systemctl start httpd

    Nginx系列-11.配置Nginx反向代理和负载均衡

  2. server3建立主页文件,并启动Apache

    cd /var/www/html
    echo -e "Server3" >> index.html
    systemctl start httpd

    Nginx系列-11.配置Nginx反向代理和负载均衡

  3. server1访问server2server3
    curl http://192.168.204.134/
    curl http://192.168.204.135/

    Nginx系列-11.配置Nginx反向代理和负载均衡

四、server1配置nginx反向代理

反向代理实验拓扑
Nginx系列-11.配置Nginx反向代理和负载均衡

  1. 编辑nginx配置文件

    vim /etc/nginx/conf.d/vhosts.conf
  2. 添加如下内容

    server {
    listen 8081;
    location / {
        proxy_pass http://[server2's ip];
    }
    }
    server {
    listen 8082;
    location / {
        proxy_pass http://[server3's ip];
    }
    }

    Nginx系列-11.配置Nginx反向代理和负载均衡

  3. 启动nginx

    systemctl start nginx

    Nginx系列-11.配置Nginx反向代理和负载均衡

  4. 测试反向代理
    • 在宿主机访问反向代理端口
      访问http://192.168.204.133:8081,可返回server2上的资源
      访问http://192.168.204.133:8082,可返回server3上的资源
      Nginx系列-11.配置Nginx反向代理和负载均衡
      Nginx系列-11.配置Nginx反向代理和负载均衡
    • 或者是在server1访问反向代理
      curl http://192.168.204.133:8081
      curl http://192.168.204.133:8082

      依次返回'server2', 'server3'
      Nginx系列-11.配置Nginx反向代理和负载均衡

五、server1配置一般轮询nginx负载均衡

  1. 重新编辑nginx配置文件

    vim /etc/nginx/conf.d/vhosts.conf
  2. 删除原内容,重新添加如下内容

    #configuring virtual hosts
    server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://web_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }
    #configure load balancing
    upstream web_server {
    #ip_hash;
    server 192.168.204.134; #server2's ip
    server 192.168.204.135; #server3's ip
    }

    Nginx系列-11.配置Nginx反向代理和负载均衡

  3. 重新启动nginx

    systemctl restart nginx

    Nginx系列-11.配置Nginx反向代理和负载均衡

  4. 编写验证脚本

    #!/bin/bash
    # filename: balance.sh
    for((i=1;i<=30;i++));
    do
    curl http://192.168.204.133/
    echo -e ""
    done
    #END

    Nginx系列-11.配置Nginx反向代理和负载均衡

  5. 执行脚本,验证负载均衡
    /bin/bash ./balance.sh

    显示的结果为server2server3交替出现
    Nginx系列-11.配置Nginx反向代理和负载均衡

六、nginx负载均衡算法

  1. upstream的两种配置方式
    • 第一种
      upstream web_server {
      server 192.168.204.134:80;
      server 192.168.204.135:80;
      }
      location / {
      proxy_pass http://web_server;
      #...
      }

      Nginx系列-11.配置Nginx反向代理和负载均衡

    • 第二种
      upstream web_server {
      server http://192.168.204.134:80;
      server http://192.168.204.135:80;
      }
      location / {
      proxy_pass web_server;
      #...
      }

      Nginx系列-11.配置Nginx反向代理和负载均衡

  2. 热备
    两台服务器中,只有当一台服务器宕掉的时候,才启用另一台
    服务器处理请求的顺序为:AAAAAAA,A宕机了,BBBBBB

    upstream web_server {
    server 192.168.204.134:80 backup;
    server 192.168.204.135:80;
    }

    Nginx系列-11.配置Nginx反向代理和负载均衡
    重启nginx后运行测试脚本
    Nginx系列-11.配置Nginx反向代理和负载均衡
    宕掉server3
    Nginx系列-11.配置Nginx反向代理和负载均衡
    再次运行测试脚本
    Nginx系列-11.配置Nginx反向代理和负载均衡

  3. ip_hash
    Nginx会让相同的客户端IP请求相同的服务器

    upstream web_server {
    ip_hash;
    server 192.168.204.134:80;
    server 192.168.204.135:80;
    }

    Nginx系列-11.配置Nginx反向代理和负载均衡
    重启nginx后运行测试脚本
    Nginx系列-11.配置Nginx反向代理和负载均衡

  4. 轮询
    Nginx中轮询的权重默认都是1
    服务器处理请求的顺序为:ABABABABABABAB

    upstream web_server {
    server 192.168.204.134;
    server 192.168.204.135;
    }

    Nginx系列-11.配置Nginx反向代理和负载均衡
    重启nginx后运行测试脚本
    Nginx系列-11.配置Nginx反向代理和负载均衡

  5. 加权轮询
    根据配置的加权的大小而分发给不同服务器不同的请求。默认是1
    下面配置的请求顺序为:ABBABBABBABB

    upstream web_server {
    server 192.168.204.134:80 weight=1;
    server 192.168.204.135:80 weight=2;
    }

    Nginx系列-11.配置Nginx反向代理和负载均衡
    重启nginx后运行测试脚本
    Nginx系列-11.配置Nginx反向代理和负载均衡

  6. Nginx负载均衡配置的几个状态
    Nginx的负载均衡多参数配合使用

    upstream {
    server 192.168.204.134:80 weight=2 max_fails=2 fail_timeout=2;
    server 192.168.204.135:80 weight=2 max_fails=2 fail_timeout=2;
    }
    1. down 表示当前的server暂时不参与负载均衡。
    2. backup 预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
    3. max_fails 允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
    4. fail_timeout 在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

猜你喜欢

转载自blog.51cto.com/tong707/2127163
今日推荐