Nginx负载均衡配置

Nginx不仅可以作为强大的web服务器,而且nginx还可以按多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

Nginx的负载均衡通过ngx_stream_upstream_module模块实现。使用如下指令实现负载均衡配置。

1、Nginx的负载均衡算法

Nginx 的ngx_stream_upstream_module模块目前支持3种方式的分配 
round-robin : 轮询。

least-connected:最少连接。

ip-hash—:按照访问ip的哈希结果进行分配。

2、常用命令

upstream命令


Syntax:

upstream name {  ... }

Default:

Context:

stream

upstream定义一组服务器。服务器可以在不同的端口上监听。此外,服务器监听TCP和UNIX域套接字可以混合。

例如:

upstreambackend {

    server backend1.example.com:12345 weight=5;

    server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;

    server unix:/tmp/backend2;

    server backend3.example.com:12345 resolve;

    server backup1.example.com:12345  backup;

}

server命令


Syntax:

server address [parameters];

Default:

Context:

upstream

Server命令定义服务器的地址和其它参数。地址可以被指定为一个域名或IP地址与一个端口,或作为一个UNIX域套接字路径后的“UNIX指定:”前缀。一个可以在一次定义多个服务器的域名解析为多个地址定义多个服务器。

parameters可以使用如下参数

weight=number:设置权重值,权重值越大分配连接越多,默认为1。

max_fails=number:请求失败的最大次数,默认为1.

fail_timeout=time:max_fails 次失败后,暂停的时间,默认为10秒。

Backup:标记该服务器为备份服务器,当其它所有的非备份服务器宕机或者忙的时候,请求转发至backup机器。所以这台机器压力会最轻。

Down:表示当前这台服务器暂时不参与负载均衡。

max_conns=number:同时连接到的负载均衡服务器的最大数。默认值为零,意思是没有限制。

3、配置负载均衡服务器

实验环境为:

    负载服务器:192.168.1.106

    后端服务器1:192.168.1.112 该服务器页面显示为"this is jason2 website".

    后端服务器2:192.168.1.113 该服务器页面显示为"this is jason3wetsite".

 

负载服务器配置文件就进行调整,配置如下内容。

   upstream mysite {

                 server 192.168.1.112:80weight=3;

                 server 192.168.1.113:80weight=1;}

    server {

        listen 80; 

        server_name www.jason.com; 

        access_log logs/host.access.logmain; 

  

        location / { 

                index index.html; 

                proxy_pass http://mysite;

        }

后端服务器1配置

[root@jason2nginx]# cat nginx.conf

user  nobody;

worker_processes  1;

pid nginx.pid;

error_log  logs/error.log  notice;

worker_rlimit_nofile 65535;

 

events{

    worker_connections  65535;

    use epoll;

}

 

http {

    include       mime.types;

    default_type  application/octet-stream;

    log_format main  '$remote_addr - $remote_user[$time_local] "$request" '

                      '$status $body_bytes_sent"$http_referer" '

                     '"$http_user_agent" "$http_x_forwarded_for"';

    log_format download  '$remote_addr -$remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent"$http_referer" '

                     '"$http_user_agent" "$http_x_forwarded_for"';

   access_log logs/access.log  main;

   client_max_body_size 20M;

   client_header_buffer_size    4k;

   large_client_header_buffers  4 8k;

   client_header_timeout  10;

   client_body_timeout    10;

   send_timeout           10;

   sendfile         on;

   tcp_nopush       on;

   tcp_nodelay      on;

   keepalive_timeout  60;

  

   gzip on;

   gzip_min_length  1k;

   gzip_http_version 1.1;

   gzip_buffers     48k;

   gzip_comp_level 2;

   gzip_types       text/plain application/x-javascripttext/css application/xml;

   gzip_vary on;

   

   server {

        listen 80; 

        server_name www.jason2.com; 

        access_log logs/access.log main; 

  

        location / { 

                index index.html; 

                root/usr/local/nginx/html/jason2; 

        }

        error_page  404              /404.html;

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

              root  /usr/local/nginx/html;

        }

        location = /favicon.ico {

                log_not_found off;

                access_log off;

        }  

        location ~ /\.ht {

            deny  all;

        }

    }

}

[root@jason2nginx]#

后端服务器2配置如下:

[root@jason3nginx]# cat nginx.conf

user  nobody;

worker_processes  1;

pid nginx.pid;

error_log  logs/error.log  notice;

worker_rlimit_nofile 65535;

 

events{

    worker_connections  65535;

    use epoll;

}

 

http {

    include       mime.types;

    default_type  application/octet-stream;

    log_format main  '$remote_addr - $remote_user[$time_local] "$request" '

                      '$status $body_bytes_sent"$http_referer" '

                     '"$http_user_agent" "$http_x_forwarded_for"';

    log_format download  '$remote_addr -$remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent"$http_referer" '

                     '"$http_user_agent" "$http_x_forwarded_for"';

   access_log logs/access.log  main;

   client_max_body_size 20M;

   client_header_buffer_size    4k;

   large_client_header_buffers  4 8k;

   client_header_timeout  10;

   client_body_timeout    10;

   send_timeout           10;

   sendfile         on;

   tcp_nopush       on;

   tcp_nodelay      on;

   keepalive_timeout  60;

       

   gzip on;

   gzip_min_length  1k;

   gzip_http_version 1.1;

   gzip_buffers     4 8k;

   gzip_comp_level 2;

   gzip_types       text/plain application/x-javascripttext/css application/xml;

   gzip_vary on;

  

   server {

        listen 80; 

        server_name www.jason3.com; 

        access_log logs/access.log main;   

  

        location / { 

                index index.html; 

                root/usr/local/nginx/html/jason3; 

        }

 

        error_page  404              /404.html;

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

                                root   /usr/local/nginx/html;

        }

        location = /favicon.ico {

                log_not_found off;

                access_log off;

        }                 

        location ~ /\.ht {

            deny  all;

        }

    }

}

[root@jason3nginx]#

4、配置修改完毕后,启动nginx。进行访问www.jason.com站点。当不断刷新页面时,页面显示也跟着在变化。根据分配的weight值不一样分配的比例也不一样,本实验中分配比例为3:1.如下图:

wKiom1ZOyNOz09ogAACX868c7ZQ813.jpg

wKiom1ZOyNSxCwPvAACVYc12cQc604.jpg