nginx如何实现反向代理负载均衡

反向代理、负载均衡,听起来很高大上的感觉,然而看懂其中原理和配置过程后,发现并不难的,都是纸老虎罢了。之前就听说过反向代理和负载均衡了,这两天抽空,用VMware虚拟机实现了负载均衡的过程。因为条件有限,并没有那么多的主机用来做服务器(qiong.......),只能搭建虚拟机的了。


  1. window系统上安装win版nginx服务器

    window当做代理,需要下载win版的ngnix
    win版nginx下载
    这里我选择的是稳定版本。
    下载完后解压到你需要放的任意一个盘下,启动window的cmd命令行界面。进入对应的nginx目录运行 start nginx
    成功启动nginx后,可以继续运行以下命令,可以查看nginx进程的一些情况
    tasklist /fi "imagename eq nginx.exe"

    nginx如何实现反向代理负载均衡_第1张图片
    任务列表.png

如图,nginx已经启动成功,浏览器地址栏输入localhost即可看到nginx事例页面了

  1. window安装VMware,wmware上安装若干个(我这里是3个)linux(centos7)操作系统及nginx网络服务
    下载vmware安装好了,然后下载一个系统镜像,这里我用的是centos7的镜像,然后vmware运行后安装centos7的操作系统,这里我安装了3个系统作为反向代理的服务机

    nginx如何实现反向代理负载均衡_第2张图片
    vmware主机列表.png

    不过,这里是需要使得每个系统都能够网络访问的,我采用的是NAT的联网方式
    nginx如何实现反向代理负载均衡_第3张图片
    NAT.png

    启动网络服务后,可以ping www.baidu.com检查是否可以访问网络了。
    centos7的话,ipconfig不再适用,如下可以查看到当前主机的ip地址等
    nginx如何实现反向代理负载均衡_第4张图片
    ipaddr.png

    我的ip地址为192.168.200.129
    另外,我们还需要为每一台主机安装nginx服务器
    centos7下载nginx
    关于centos7安装nginx服务器的过程我重复了,这篇文章描述很详细了

  2. window主机当作反向代理的代理
    反向代理的配置其实非常简单,你需要的是在代理主机上添加所需的虚拟服务器即可

  • 在window的nginx配置目录下,新建proxy.conf文件:
server {
    listen 80;
    server_name www.a.com;
    location / {
        proxy_pass http://192.168.200.129; #后端ip地址
        proxy_redirect off; #关闭后端返回的header修改
        proxy_set_header Host $proxy_host; #修改发送到后端的header的host
        proxy_set_header X-Real-IP $remote_addr; #设置真实ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name www.b.com;
    location / {
        proxy_pass http://192.168.200.128; #后端ip地址
        proxy_redirect off; #关闭后端返回的header修改
        proxy_set_header Host $proxy_host; #修改发送到后端的header的host
        proxy_set_header X-Real-IP $remote_addr; #设置真实ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name www.c.com;
    location / {
        proxy_pass http://192.168.200.131; #后端ip地址
        proxy_redirect off; #关闭后端返回的header修改
        proxy_set_header Host $proxy_host; #修改发送到后端的header的host
        proxy_set_header X-Real-IP $remote_addr; #设置真实ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

然后修改nginx.conf文件,在最后的‘}’前include反向代理文件proxy.conf

#反向代理配置
include proxy.conf;

接着,需要到window系统的‘C:\Windows\System32\drivers\etc’目录下修改hosts文件,添加所代理的服务器的域名和ip映射,这里我三台服务器的ip地址是192.168.200.129、192.168.200.128、192.168.200.131

192.168.200.129 www.a.com
192.168.200.128 www.b.com
192.168.200.131 www.c.com

用window的浏览器输入'www.a.com'等域名,可显示对应的服务器的主页内容,即是反向代理配置成功了。是不是贼简单哈~~~

  1. 添加负载均衡查询
    上面的步骤把反向代理的环境搭建好了,接下来即可以增加负载均衡功能,分流代理服务器的流量压力。在代理服务器的nginx.conf中添加以下配置
#负载均衡轮询
upstream tomcats {
    server www.a.com  weight=3;   #weight代表权重
    server www.b.com  weight=2;
    server www.c.com;
}

这里我使用了加权轮询的方式,然后修改改文件下的server中的location

location / {
    #root   html;
    #index  index.html index.htm;
    proxy_pass http://tomcats;
}

以上所有负载均衡配置已经完成,在浏览器处输入localhost,刷新几次能够显示www.a.com、www.b.com、www.c.com服务主机的几个不同网页,即说明负载均衡已经完成了。
代理服务器的nginx.conf全部内容如下:


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


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;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    
    #反向代理配置
    include proxy.conf;
    
    #负载均衡轮询
    upstream tomcats {
        server www.a.com  weight=3;
        server www.b.com  weight=2;
        server www.c.com;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://tomcats;
        }

        #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   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;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    
    
}

本文实现了使用vmware实现反向代理负载均衡的服务功能,负载均衡仅采用了加权轮询,其他查询方式将在下一章详解。。

你可能感兴趣的:(nginx如何实现反向代理负载均衡)