Nginx作为负载均衡——实战演练

Posted Joy_Sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx作为负载均衡——实战演练相关的知识,希望对你有一定的参考价值。

配置语法

Syntax:upstream name {...}

Default:——

Context:http

演示

准备两台虚拟主机192.168.96.188、192.168.96.188

在188这台主机上创建3个html静态文件

vi /opt/app/code1/index.html

<html>
<head>
    <meta charset="utf-8">
    <title>server1</title>
</head>
<body style="">
    <h1>Server 1<h1>
</body>
</html>

技术图片

vi /opt/app/code2/index.html

<html>
<head>
    <meta charset="utf-8">
    <title>server2</title>
</head>
<body style="">
    <h1>Server 2<h1>
</body>
</html>
技术图片

vi /opt/app/code3/index.html

<html>
<head>
    <meta charset="utf-8">
    <title>server3</title>
</head>
<body style="">
    <h1>Server 3<h1>
</body>
</html>
技术图片

在188这台主机上创建3个.conf配置文件。配置如下

 vi /etc/nginx/conf.d/server1.conf

server {
    listen       8001;        #请求的8001端口 
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/server1.access.log  main;

    location / {
        root   /opt/app/code1;        #静态文件目录
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504 404  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the php scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ .php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ .php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache‘s document root
    # concurs with nginx‘s one
    #
    #location ~ /.ht {
    #    deny  all;
    #}
}
技术图片

vi /etc/nginx/conf.d/server2.conf

server {
    listen       8002;        #请求的8002端口 
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/server1.access.log  main;

    location / {
        root   /opt/app/code2;        #静态文件目录
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504 404  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ .php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ .php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache‘s document root
    # concurs with nginx‘s one
    #
    #location ~ /.ht {
    #    deny  all;
    #}
}
技术图片

 vi /etc/nginx/conf.d/server3.conf

server {
    listen       8003;        #请求的8003端口 
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/server1.access.log  main;

    location / {
        root   /opt/app/code3;        #静态文件目录
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504 404  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ .php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ .php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache‘s document root
    # concurs with nginx‘s one
    #
    #location ~ /.ht {
    #    deny  all;
    #}
}
技术图片

在135这台主机上配置负载均衡

添加配置文件

vi /usr/local/nginx/conf/hosts/upstream.conf

 upstream test {
        server 192.168.96.188:8001;        # 添加 test 配置监听的ip+端口
        server 192.168.96.188:8002;
        server 192.168.96.188:8003;

        }

server {
    listen       80;
    server_name  localhost jeson.t.imooc.io;

    #charset koi8-r;
    #access_log  /usr/local/nginx/logs/test_proxy.access.log  main;
    resolver  8.8.8.8;

    location / {
        proxy_pass http://test;      # 添加需要监听 test
        include proxy_params;     # 存储语法的文件名称
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ .php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ .php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache‘s document root
    # concurs with nginx‘s one
    #
    #location ~ /.ht {
    #    deny  all;
    #}
}

技术图片

在/usr/local/nginx/conf/目录新建文件

vi proxy_params   #对应楼上配置文件中的文件名称

proxy_redirect default;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


技术图片

配置好两台主机的nginx。记得检查语法、重启nginx。

使用本地浏览器访问192.168.96.135,按F5刷新,会循环访问server1、server2、server3、

技术图片技术图片?

这是关闭主机188的8002端口

 iptables -I INPUT -p tcp --dport 8002 -j DROP

再次本地浏览器访问192.168.96.135,按F5刷新。这时候就不会有server2访问页面了

技术图片技术图片?

现实场景中,三台主机有一台主机宕机了,没有做负载均衡,会导致其他主机也无法访问。

有做负载均衡,一台主机宕机了,其他主机照样也能访问

以上是关于Nginx作为负载均衡——实战演练的主要内容,如果未能解决你的问题,请参考以下文章

Nginx+Tomcat——配置负载均衡和动静分离(实战!)

利用nginx实现动静分离的负载均衡集群实战

企业级Nginx负载均衡与keepalived高可用实战keepalived篇

Nginx反向代理和负载均衡应用实战

Nginx反向代理和负载均衡应用实战

Nginx+Tomcat负载均衡群集(实战可跟做!)