分布式架构之Nginx负载均衡详细配置介绍入门级

来自:互联网
时间:2019-11-21
阅读:

说明:这篇配置介绍是本人为了熟悉了解Nginx负载均衡架构而在本地虚拟机上实验的,本文作为记录配置过程以备以后查看。

负载均衡的前提是服务器分布式集群架构,有两台以上的服务器提供服务,可以保证两台服务器的流量均衡。这样不至于忙的忙死,闲的闲死。

大致流程像这样子,用户发出请求,经过中间那层Nginx负载均衡处理之后,流量会均衡分发到后台的业务处理webserver,业务处理服务器经过Cache、MySQL层获取到数据之后返回给用户。

这是简单的架构,大数据、云计算企业的服务器成千上万台,架构比这个复杂多了。

负载均衡

今天要做的就是Nginx负载均衡处理这一块。我本地当然没有那么多服务器,一台win7(A,IP:192.168.0.205)+一台Centos虚拟机(B,IP:192.168.137.163)。

计划使用A上的Nginx做负载均衡兼业务处理webserver。就是B上的nginx负责分发到A上的Nginx和B上的Nginx。如果单纯的使用B作为负载均衡分发也是没问题的。

宿主机使用phpStudy的一键安装的环境。

phpStudy

首先指定一个域名upstream.com作为本次测试的域名,需要在hosts文件中绑定一下,绑定的IP是负载均衡分发的那台服务器IP,在这里就是指的B服务器的IP。

#此处IP是负载均衡服务器IP
192.168.137.163 upstream.com

A上新建站点

phpstudy vhost

B上Nginx配置负载均衡,完整代码如下

#关键配置代码,此处backendServer可随意,只是一个负载均衡的别名,下面的分发与此一致即可
    upstream backendServer {
        #每个ip在一定时间内会被固定的后端服务器,这样我们不用解决session共享问题
        ip_hash;
        #weigth参数表示权值,权值越高被分配到的几率越大
        #此处8080是因为我同时使用B服务器作为分发和后台处理服务器,分发的webserver监听了80端口
        #那么B服务器后台处理的webserver就得换个端口,此处使用8080
        server 192.168.0.205:80 weight=2;
        server 192.168.137.163:8080 weight=8;
    }
    #这个是设置负载均衡的,监听80端口
    server {
        listen 80;
        server_name upstream.com;
        access_log /etc/nginx/logs/upstream.com.access.log mAIn;
        #对 "/" 启用负载均衡
        location / {
            #以这种格式来使用后端的web服务器,此处别名要和上面的别名保持一致
            proxy_pass http://backendServer;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 10m;
            client_body_buffer_size 128k;
            proxy_connect_timeout 90;
            proxy_send_timeout 90;
            proxy_read_timeout 90;
            proxy_buffer_size 4k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
        }
    }
##
##到这里其实负载均衡已经配置好了。
##下面的配置是在当前服务器上开启一个8080端口作为一台后台处理webserver。
##
    #这个是设置web服务的,监听8080端口,
    server {
        listen          8080;
        server_name     upstream.com;
        index           index.html index.htm;
        root            /data/www/test;
        try_files $uri $uri/ @rewrite;
        location @rewrite {
            rewrite ^/(.*)$ /index.php?_url=/$1;
        }
       
        #开启php解析支持
        location ~ .*.(php|php5)?$ {
                #自动显示目录
                autoindex on;
                #人性化方式显示文件大小否则以byte显示
                autoindex_exact_size off;
                #按服务器时间显示,否则以gmt时间显示
                autoindex_localtime on;
                #root           /var/www/php/html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
       
    }

配置完之后重启一下nginx,service nginx restart

然后在A服务器的站点目录下新建文件index.html,内容如下:

你当前访问的是192.168.0.205

在B服务器的站点目录下新建文件index.html,内容如下:

你当前访问的是192.168.137.163

然后在A服务器,即win7宿主机上访问upstream.com,因为开始绑定的host是B服务器。

负载均衡

此处显示为A服务器上的文件,如果这时把A服务器上的webserver关闭模拟服务器故障,这时再访问会出现几秒钟的迟钝,但很快会输出B服务器上的文件信息。

把上面的那个ip_hash配置注释掉的话,不断刷新页面会显示不同的内容。

至此,说明负载均衡分发配置成功,写的真是乱,供自己记录回顾吧。

返回顶部
顶部