nginx负载均衡简单示例


一、实验环境

主机名与IP

3台VM虚拟机,1台做负载均衡,2台做RS。

**HOSTNAME** **IP** **说明**
lb01 192.168.5.210 主负载均衡器
web01 192.168.5.212 web01服务器
web02 192.168.5.213 web02服务器

软件:

系统:CentOS 6.9 x86_64

软件:nginx-1.15.2.tar.gz

二、安装Nginx软件

3台服务器均安装Nginx。

1、安装依赖包

yum -y install openssl openssl-devel pcre pcre-devel

2、安装nginx软件包

useradd nginx -s /sbin/nologin -M
tar zxvf nginx-1.15.2.tar.gz
./configure --user=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install

三、配置一个虚拟主机

1、配置明细

在两台web服务器上操作,配置如下:

[root@web01 nginx-1.15.2]# cat /usr/local/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
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"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.test.com;
        location / {
            root   html/test;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

2、创建测试文件

mkdir /usr/local/nginx/html/test
echo "www.test.com 212" > /usr/local/nginx/html/test/index.html

3、测试结果

在windows客户端测试,需先开通服务器防火墙的80端口,或关闭防火墙。

四、负载均衡配置

在lb01服务器上操作,配置如下:

[root@lb01 nginx-1.15.2]# cat /usr/local/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
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"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
   **upstream test_server_pools {
        server** **192.168.5.212:80 weight=1;
        server 192.168.5.213:80 weight=1** **;
    }**    server {
        listen       80;
        server_name  www.test.com;
        location / {
           **proxy_pass http:** **//** **test_server_pools;**  
     }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

参数说明:

  • upstream :Nginx负载均衡依赖于 ngx_http_upstream_module 模块,ngx_http_upstream_module 允许Nginx定义一组或多组节点服务器组,使用时可以通过 proxy_pass代理方式把网站的请求放送到事先定义好的对应upstream组中的服务器。

官方示例:

upstream backend {  
    server backend1.example.com weight=5;  
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;  
    server unix:/tmp/backend3;  

    server backup1.example.com  backup;  
}

server的参数说明:

**upstream** **模块内参数** **参数说明**
server 127.0.0.1:8080 可以是IP或域名,默认端口80,高并发场景下,IP可换成域名,通过DNS做负载均衡
weight=1 代表服务器权重,默认值是1,数字越大表示接受的请求比例越大
max_fails=1 nginx尝试连接后端主机的次数,默认值是1,连续尝试失败后,会将请求转发给后端正常的服务器
backup 标志此服务器作为备份服务器,主服务器全部宕机时,向备份服务器转发请求;负载调度算法使用ip_hash时不可用
fail_timeout=10s 定义连接后端服务器失败之后,距离下次检查的时间,默认值是10s
down 标志服务器永远不可用
  • proxy_pass :proxy_pass指令属于 ngx_http_proxy_module 模块;在实际的反向代理工作中,把接收到的符合 location 匹配的URI请求转发给定义好的 upstream 节点池。
**Nginx 反向代理重要参数** **参数说明**
proxy_pass http://server_pools; 把请求转发至定义好的服务器池
proxy_set_header Host $Host 向后端服务器发送请求时加入 host 字段信息,可识别代理的哪个虚拟主机
proxy_set_header X-Forwarded-For $remote_addr 向后端服务器发送请求时加入 X-Forwarded-For 字段信息,用于后端服务器接收记录真实的用户IP,而非代理服务器IP

可把参数写成一个文件,使用 include 包含,看起来更规范。

location / {
     proxy_pass http://test_server_pools;
     include proxy.conf;    
}



[root@lb01 conf]# cat proxy.conf
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;  
proxy_buffers 4 32k;  
proxy_busy_buffers_size 64k;  
proxy_temp_file_write_size 64k;

五、测试

1、修改hosts地址进行测试,Windows系统hosts文件路径:C:\Windows\System32\drivers\etc

192.168.5.210    www.test.com

2、浏览器端采用无缓存刷新页面,请求配均匀的分配到后端服务器。


原文链接:https://www.cnblogs.com/qiaokeshushu/p/9385763.html