资讯专栏INFORMATION COLUMN

Nginx反向代理实现均衡负载

zeyu / 2764人阅读

摘要:架设服务器均衡负载方式有多种,是目前使用最广泛的三种方案关于均衡负载架设服务器均衡负载方式有多种,是目前使用最广泛的三种方案。服务器集群环境接下来讲下想要搭的均衡负载环境。

  

http://homeway.me



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


0x01. 关于均衡负载

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

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

关于3者比较,可以看这篇博客http://www.rootop.org/pages/2773.html

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




0x02.关于Nginx

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

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

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

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

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

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




0x03.服务器集群环境

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

系统环境 : 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




0x04.负载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丢失,一直要重新登录。

关于upstream的源码分析,可以去看 tengine的介绍 http://tengine.taobao.org/book/chapter_05.html

重启服务器下。

  

/root/lnmp restart

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

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




0x05.关于服务性能

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

Nginx的几个优点:

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

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

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




接下来会写关于KeepAlive+HAProxy实践教程。

本文出自 夏日小草,转载请注明出处:http://homeway.me/2014/12/05/nginx-reverse-proxy-to-load-balance/


-by小草

2014-12-05 17:12:26

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39100.html

相关文章

  • Nginx 反向代理 负载均衡 虚拟主机配置

    摘要:反向代理负载均衡虚拟主机配置通过本章你将学会利用配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用反向搭理和负载均衡,了解常用配置的说明。最重要的是反向代理,负载均衡。 Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解N...

    godlong_X 评论0 收藏0
  • nginx网站性能优化篇(3)】反向代理实现负载均衡

    摘要:注意本篇文章为负载均衡的理论篇后续找个机会推出实战篇。理论篇主要讲述如何配置负载均衡配置负载均衡不难。常用的状态有,表示当前的暂时不参与负载均衡。注,当负载调度算法为时,后端服务器在负载均衡调度中的状态不能是和。 注意,本篇文章为负载均衡的理论篇,后续找个机会推出实战篇。理论篇主要讲述如何配置负载均衡,配置负载均衡不难。但实战中要要注意几个点,比如如何做到多服务器之间的数据共享(ses...

    xi4oh4o 评论0 收藏0
  • Nginx反向代理负载均衡

    摘要:负载均衡严格来说,仅仅是作为反向代理的使用的,但是因为这个反向代理功能表现的效果是负载均衡机器的效果,因此负载均衡是特殊的反向代理。 反向代理 反向代理指的是以代理服务器接收用户的的访问请求,代理用户向内部服务器重新发起请求,最后把内部服务器的响应信息返回给用户。这样,代理服务器对外就表现为一台服务器,而访问内部服务器的客户端用的就是代理服务器,而不是真实网站访问用户。 为什么使用反向...

    fai1017 评论0 收藏0
  • 分布式系统的负载均衡 | 架构干货

    摘要:是的默认负载均衡策略。一致性哈希负载均衡。所以负载均衡是分布式系统架构设计中必须考虑的因素之一。考虑主要是如何让下游接收到的请求是均匀分布的第层客户端层反向代理层的负载均衡。通过轮询第层反向代理层层的负载均衡。 一、 什么是负载均衡? 什么是负载均衡? 记得第一次接触 Nginx 是在实验室,那时候在服务器部署网站需要用 Nginx 。Nginx 是一个服务组件,用来反向代理、负载平衡...

    twohappy 评论0 收藏0

发表评论

0条评论

zeyu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<