Nginx还有两大功能:
1、Nginx可以实现反向代理启用cache缓存:那Nginx如何实现反向代理,Nginx反向代理功能是通过http proxy模块来实现的,默认已经编译安装上,
Nginx通过proxy_cache指令,把访问远端服务器内容缓存在本地磁盘中,从而加快网站访问速度,降低服务器的负载
2、Nginx可以配置第三方模块,实现upstream中对后端http server的健康状态检测

 

操作系统:redhat5.8

实验:准备三台服务器
Nginx eth0:172.16.0.22
Nginx eth1:192.168.100.1
Server1 eth0:192.168.100.2
Server2 eth0:192.168.100.3

实验拓扑图如下:

Nginx实现负载均衡_第1张图片

实验目的:通过Nginx反向代理功能配置,实现把用户的请求的资源缓存在本地服务器,可以实现加快网站访问速度和降低服务器负载,并配置第三方模块,
实现upstream中对后端http server的健康状态检测

目录:
一、Nginx配置
二、Server1配置
三、Server2配置
四、测试

 


一、Nginx配置

   
   
   
   
  1. 1、解压healthcheck_nginx_upstreams模块  
  2. #unzip healthcheck_nginx_upstreams.zip  
  3. #mv cep21-healthcheck_nginx_upstreams-16d6ae7 nginx_health  
  4.  
  5. 2、对nginx打补丁  
  6. #tar xf nginx-1.0.14.tar.gz  
  7. #cd nginx-1.0.14  
  8. #patch -p1 < /root/nginx_health/nginx.patch  
  9.  
  10. 注意:编译nginx,在执行configure时添加以下选项  
  11. --add-module=/root/nginx_health   #这是解压healthcheck_nginx_upstreams.zip的目录路径  
  12.  
  13. 3、编译安装nginx  
  14. # ./configure \  
  15.   --prefix=/usr \  
  16.   --sbin-path=/usr/sbin/nginx \  
  17.   --conf-path=/etc/nginx/nginx.conf \  
  18.   --error-log-path=/var/log/nginx/error.log \  
  19.   --http-log-path=/var/log/nginx/access.log \  
  20.   --pid-path=/var/run/nginx/nginx.pid  \  
  21.   --lock-path=/var/lock/nginx.lock \  
  22.   --user=nginx \  
  23.   --group=nginx \  
  24.   --with-http_ssl_module \  
  25.   --with-http_flv_module \  
  26.   --with-http_stub_status_module \  
  27.   --with-http_gzip_static_module \  
  28.   --http-client-body-temp-path=/var/tmp/nginx/client/ \  
  29.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \  
  30.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \  
  31.   --with-pcre \  
  32.   --add-module=/root/nginx_health  
  33. # make && make install  
  34.  
  35.  
  36. 4、修改nginx主配置文件  
  37. #mkdir -pv /data/nginx/cache    #创建nginx缓存存放目录   
  38. #vim /etc/nginx/nginx.conf  
  39. 修改以下内容  
  40. proxy_cache_path  /data/nginx/cache  levels=1:2  keys_zone=servercache:10m #设置内存区域,名字可以自己取  
  41. #代理使用的缓存路径                   #缓存目录里建立的层次,就是子目录         
  42. inactive=24h    max_size=1g;  
  43. #24小时不超时    #缓存目录大小  
  44.  
  45. upstream myserver {   
  46. #设置负载均衡指令,myserver名字可以自已取  
  47.         server 192.168.100.2 weight=4 max_fails=3 fail_timeout=30s;  #负载均衡的服务器  
  48.         server 192.168.100.3 weight=5 max_fails=3 fail_timeout=30s;  
  49.         healthcheck_enabled;      #启用检测试RS模块  
  50.         healthcheck_delay 1000;   #对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000  
  51.         healthcheck_timeout 1000; #进行一次健康检测的超时时间,单位为毫秒,默认值2000;  
  52.         healthcheck_failcount 1;  #对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器  
  53.         healthcheck_expected 'ok';#检查server文件里内容  
  54.         healthcheck_send "GET /.test.html  HTTP/1.0";#检测后端服务器的健康状态所发送的检测请求  
  55. }  
  56. server {  
  57.         listen       80;  
  58.         server_name  www.test.com;  
  59.         access_log  /var/log/nginx/www.access;  
  60.         error_log  /var/log/nginx/www.err;  
  61.           
  62.   location / {  
  63.             proxy_pass             http://myserver;   
  64.             proxy_set_header       Host $host;  
  65.             proxy_cache            servercache;   
  66.             proxy_cache_valid      200  1d;       
  67.             proxy_cache_use_stale  error timeout invalid_header updating   
  68.                                    http_500 http_502 http_503 http_504;  
  69.          }  
  70.   location /stat {  
  71.              healthcheck_status; #开启server状态监控  
  72.                       
  73.         }      

二、Server1配置

   
   
   
   
  1. 安装httpd  
  2. #yum -y install httpd  
  3. #echo "<h1>Server1h1>>/var/www/html/index.html         
  4. #echo "ok" >/var/www/html/.test.html           
  5. #service httpd start     

三、Server2配置

   
   
   
   
  1. 安装httpd  
  2. #yum -y install httpd  
  3. #echo "<h1>Server2h1>>/var/www/html/index.html         
  4. #echo "ok" >/var/www/html/.test.html           
  5. #service httpd start 

四、测试

请做好你的域名解析

1、测试负载均衡

提示:测试的时候请关闭proxy cache缓存

Nginx实现负载均衡_第2张图片

刷新一下

Nginx实现负载均衡_第3张图片

2、测试cache

提示:此时做下压力测试,在server一台服务器上放张图片,然后在Nginx服务器上做下压力测试,查看缓存目录有没有生成文件,然后对比一下速度,就知道缓存的效果了

3、查看server状态

Nginx实现负载均衡_第4张图片

4、停止一台server继续查看一下

Nginx实现负载均衡_第5张图片

提示:把刚才停止的server开启,查看能否自动加载上

 

实验出现的问题:  
问题:为nginx打补丁以后,编译nginx的时候出现make[1]: *** [objs/addon/nginx/ngx_http_healthcheck_module.o] Error 1
make[1]: Leaving directory `/root/nginx-1.2.2'
make: *** [build] Error 2
原因:nginx与healthcheck_nginx_upstreams版本不兼容,换成一个低的版本就可以了,我用的是nginx-1.0.14,当然也可以用最新版本来做
模块下载地址:
https://github.com/cep21/healthcheck_nginx_upstreams;模块名称:ngx_http_healthcheck_module

了解更多nginx用法请参考官方网站:www.nginx.org