| 当前位置:  网站首页 > 新闻中心 > 环境部署类>Nginx反向代理实现均衡负载

Nginx反向代理实现均衡负载

英雄软件 | 2016-05-26 11:40:47

【导读】   Nginx反向代理实现均衡负载 ...

    架设服务器均衡负载方式有多种,Nginx、LVS、HAProxy+Keepalived是目前使用最广泛的三种方案


    1. 关于均衡负载

    架设服务器均衡负载方式有多种,Nginx、LVS、HAProxy+Keepalived是目前使用最广泛的三种方案。

    其中Keepalived+HAProxy是一个高可用性方案。

    工作在网络的7层之上,可以针对http应用做一些分流的策略。




    2.关于Nginx

    nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。

    master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

    而基本的网络事件,则是放在worker进程中来处理了。

    多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。

    关于nginx,主要由3大模块,内核模块,事件模块,http核心模块。

    nginx模块一般被分成三大类:handler、filter和upstream。

    nginx工作模型nginx工作模型




    3.服务器集群环境

    接下来讲下想要搭的均衡负载环境。

    Nginx服务器集群Nginx服务器集群

    系统环境 : Linux Centos 7 aws 2.6.32-504.1.3.el6.x86_64 Nginx Version:1.6.0 均衡负载服务器: 172.31.19.122:80(lnmp一键安装) WEB1: 172.31.15.59:80 WEB2: 172.31.15.94:80 WEB3: 172.31.15.24:80 




    4.负载Nginx配置

    服务器用lnmp一键安装,自带的conf配置已经配置好一切了。

    下面是完整的配置文件。

    /usr/local/nginx/conf/nginx.conf


    user  www www;
    worker_processes auto;
    error_log /home/wwwlogs/nginx_error.log  crit;
    pid        /usr/local/nginx/logs/nginx.pid;
    worker_rlimit_nofile 51200;
    
    events {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }
    
    http {
        include       mime.types;
        default_type application/octet-stream;#处理接收的数据类型 server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;
    
        sendfile on;
        tcp_nopush     on;
    
        keepalive_timeout 60;
        tcp_nodelay on;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k; # 添加gzip压缩 gzip on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types       text/plain application/x-javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied        expired no-cache no-store private auth;
        gzip_disable "MSIE [1-6]\.";
    
        server_tokens off; # 通过upstream处理均衡负载 upstream static.homeway {
            server 172.31.15.24:80;
        }
        upstream homeway { # ip hash主要是对ip处理下,让下次访问时候,还是访问当前服务器,这样就不会导致session丢失 ip_hash; # weight权重,配置访问概率 server 172.31.15.59:80 weight=10;
            server 172.31.15.94:80 weight=5;
        }
    
        server {
    
            listen 80 default;
            server_name 172.31.19.122;
            index index.html index.htm index.php; #error_page   404   /404.html; location ~ .*\.(js|css)?$ {
                expires 12h;
            } # 静态文件可以用CDN处理,本例子指向WEB3 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                proxy_pass http://static.homeway;
            } # 通过均衡负载服务器指向WEB1、WEB2  location / {
                proxy_pass http://homeway; #使用后端的web服务器  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;
            }
            access_log /home/wwwlogs/access.log  access;
        }
        include vhost/*.conf;
    }

    核心指令”ip_hash”只能在upstream {}中使用。这条指令用于通知nginx使用ip hash负载均衡算法。如果没加这条指令,nginx会使用默认的round robin负载均衡模块,那么,你每次访问的服务器可能会不同,导致session丢失,一直要重新登录。


    重启服务器下。

    /root/lnmp restart

    搞定了,确定WEB1,WEB2,WEB3可以正常访问就行了。

    这样,假设,我在WEB1的web目录下放一个 fuck.php, WEB2不放,那么。当我访问http://172.31.19.122时候,就会有时候404,有时候返回正常页面,这就表示成功了。




    5.关于服务性能

    这个在目前不能做,因为无法做多用户并发访问,就算模拟器模拟效果也不能达到多用户并发的强度。

    Nginx的几个优点:

    • Nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下LVS并不具备这样的功 能,所以Nginx单凭这点可利用的场合就远多于LVS了;但Nginx有用的这些功能使其可调整度要高于LVS,所以经常要去触碰触碰,触碰多了,人为 出问题的几率也就会大。

    • Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可以考虑用其作为反向代理加速器。

    • Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一。
上一篇: 没有了
下一篇: 没有了

最新动态

中小企业部署服务器的方案策略

中小企业部署服务器的方案策略[详情]

创业公司如何搭建服务器配置方案?

创业公司如何搭建服务器配置方案?[详情]

双机热备软件 免费双机热备方案部署

双机热备软件 免费双机热备方案部署[详情]

基于虚拟化服务器的部署方案

基于虚拟化服务器的部署方案[详情]

大型系统的发布部署方案

大型系统的发布部署方案[详情]

高可用、开源的Redis缓存集群方案

高可用、开源的Redis缓存集群方案[详情]

Nginx反向代理实现均衡负载

Nginx反向代理实现均衡负载[详情]

标准MySQL数据库外的5个开源兼容

MySQL是最受欢迎的免费开源应用之一,它是成千上万个网站的数据库骨干。然而,许多开发人员[详情]

联系我们 <<