nginx实现负载均衡集群的方案分享

发布时间:2019-09-16编辑:脚本学堂
本文介绍下,用nginx实现负载均衡集群的方法,通过nginx的反向代理来实现,有需要的朋友参考下。

(三)、功能完善
安装配置第三方模块,实现upstream中对后端web server的健康状态检测:
模块下载地址:https://github.com/cep21/healthcheck_nginx_upstreams
模块名称:ngx_http_healthcheck_module

安装配置方法:
1、解压healcheck模块到某路径下,假设为/tmp/healthcheck_nginx_upstreams
 

复制代码 代码示例:
#tar -xvf cep21-healthcheck_nginx_upstreams-16d6ae7.tar.gz -C /tmp/healthcheck_nginx_upstreams

2、对nginx打补丁
解压nginx,并进入nginx源码目录:
 

复制代码 代码示例:
# tar xf nginx-1.3.4.tar.gz
# cd nginx-1.0.11
# patch -p1 < /tmp/healthcheck_nginx_upstreams/nginx.patch
 

而后编译nginx,在执行configure时添加类似下面的选项:
--add-module=/tmp/healthcheck_nginx_upstreams
所以,这里就使用如下命令:
 

复制代码 代码示例:
# ./configure
--prefix=/usr/local/nginx
--sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf
--lock-path=/var/lock/nginx.lock
--user=nginx
--group=nginx
--with-http_ssl_module
--with-http_flv_module
--with-http_stub_status_module
--with-http_gzip_static_module
--http-proxy-temp-path=/var/tmp/nginx/proxy/
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
--with-pcre
--add-module=/tmp/healthcheck_nginx_upstreams
# make && make install

ngx_http_healthcheck_module模块的使用方法:
1、此模块支持的指令有:
 

复制代码 代码示例:
healthcheck_enabled
##启用此模块
healthcheck_delay
##对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000;
healthcheck_timeout
##进行一次健康检测的超时时间,单位为毫秒,默认值2000;
healthcheck_failcount
##对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器;
healthcheck_send
##为了检测后端服务器的健康状态所发送的检测请求;如:healthcheck_send "GET /health HTTP/1.0" 'Host: coolinuz.9966.org';
healthcheck_expected
##期望从后端服务器收到的响应内容;如果未设置,则表示从后端服务器收到200状态码即为正确;
healthcheck_buffer
##健康状态检查所使用的buffer空间大小;
 
healthcheck_status
通过类似stub_status的方式输出检测信息,使用方法如下:
location /stat {
  healthcheck_status;
}

(四)、配置与实现
配置代码如下:
 

复制代码 代码示例:

http {
  upstream web_pool {
    server 172.23.136.148:80 weight=10;
    server 172.23.136.149:80 weight=5;
    healthcheck_enabled;
    healthcheck_delay 1000;
    healthcheck_timeout 1000;
    healthcheck_failcount 2;
    healthcheck_send "GET /.health HTTP/1.0";
  }
  server {
    listen 80;
    location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://web_pool;
      proxy_connect_timeout 3;
    }
    location /stat {
      healthcheck_status;
    }
  }

}

在这里设置“proxy_set_header”参数,是因为Nginx在做反向代理的时候,要代替客户端去访问服务器,所以,当请求包经过反向代理后,在代理服务器这里这个IP数据包的IP包头做了修改,最终后端web服务器得到的数据包的头部的源IP地址是代理服务器的IP地址,这样一来,后端服务器的程序给予IP的统计功能就没有任何意义,或者后端web服务器上有多个基于域名的虚拟主机时,就要通过添加Header头信息Host,用于指定请求的域名,这样后端web服务器才能识别该反向代理访问请求由哪个虚拟主机来处理。

(五)、小结
Nginx的配置比较其他的web服务器软件要简单,但是其实现的功能确实相当强大丰富的。

通过Nginx的反向代理已经支持灵活的正则表达式匹配,可以实现网站的动、静分离,让动态的php等程序网页去访问php web服务器,让缓存页、图片、javascript、css、flash去访问Squid等缓存服务器或文件服务器。

加之Nginx对静态内容的高性能,高并发量,Nginx作为前端代理负载均衡成为越来越多架构师的首先方案。

您可能感兴趣的文章:
Nginx负载均衡与反向代理的例子(图文)
Nginx Proxy 代理配置图片缓存的实例参考
nginx正向代理配置简单一例
nginx反向代理配置简单示例
学习Nginx反向代理实现简单负载均衡(图文)
nginx缓存html静态文件 解析php及反向代理IIS的配置
nginx1.0.0配置ngx_cache_purge实现高效反向代理的方法
nginx中配置proxy正向代理
nginx创建反向代理和虚拟主机的例子
nginx的反向代理配置与优化
nginx反向代理与varnish缓存配置
nginx反向代理与负载均衡
Nginx 反向代理的小例子
nginx反向代理与缓存详解
nginx反向代理配置一例
Nginx反向代理Nginx
nginx反向代理配置和优化
Nginx Proxy代理和图片缓存配置
nginx配置反向代理的简单示例