nginx 负载均衡与location应用分析 简单实验

参考:软件级负载均衡器(LVS/HAProxy/Nginx)的特点和对比


文章重点记录nginx负载均衡。

 为了实验,我习惯性的先上拓扑图,如下:

 

我们的案例需求如下,前端nginx做负载均衡,并处理静态页面,使用location查询过滤将动态页面交由后端apache服务器集群做处理。并由nginx回显内容输出。

nginx负载均衡服务器安装配置:

 

 
 
  1. [root@lvs /]# rpm -qa | grep pcre 
  2. pcre-devel-6.6-2.el5_1.7 
  3. pcre-6.6-2.el5_1.7 
  4.  
  5. # pcre的作用是为nginx提供兼容perl的正则表达式,使nginx支持HTTP Rewrite模块. 
  6.  
  7. [root@lvs ~]# wget http://nginx.org/download/nginx-0.8.53.tar.gz 
  8. [root@lvs nginx-0.8.53]# ./configure  --with-http_stub_status_module
  9. [root@lvs nginx-0.8.53]# make && make install
  10. # --with-http_stub_status_module 可以用来启用nginx的nginxStatus功能,以监控
  11. nginx当前状态。

 

在继续配置之前,需要先了解我们要做什么。我只想做个基本的实验来看下nginx的负载均衡是如何工作的,所以我的实验设计是这样的。

当我们访问192.168.182.131/index.html 时,由于是静态页面,交给nginx本身处理,如果我们访问 192.168.182.131/test.php时,配置location匹配 .php 后缀,并交由后端apache集群来处理,至于集群会以什么样的方式来处理,后面用到时再说。

 

 

 
 
  1. [root@lvs conf]# pwd 
  2. /usr/local/nginx/conf 
  3. [root@lvs conf]# vim nginx.conf 
  4.  
  5. user  nobody; 
  6. worker_processes  1;  
  7. # 指定nginx要开启的进程数,建议一个CPU的内核就处理一个进程,所以如果是4核CPU,就指定4个进程数。 
  8.  
  9. events { 
  10.         use epoll; 
  11.         worker_connections  1024; 
  12. # use epoll 是指nginx的工作模式,epoll是比较高效的工作模式,对于 #linux/unix平台,
  13. epoll是首选模式。# worker_connections 是一个进程的最大连接数。由此即可算出最大的客
  14. 户端数量:max_client = worker_processes * worker_connections; 
  15.  
  16. http { 
  17.    server { 
  18.     listen              80; 
  19.     server_name         192.168.182.131; 
  20.     index               index.html; 
  21.     root                /usr/local/nginx/html; 
  22.     charset             gb2312; 
  23.     upstream MyServer { 
  24.             ip_hash; 
  25.             server 192.168.182.132:80; 
  26.             server 192.168.182.133:80; 
  27.          }      
  28.      location ~* .*.php$ { 
  29.              proxy_pass          http://MyServer; 
  30.      }  
  31.      } 

负载均衡的配置是这里:

 

  1.     upstream MyServer { 
  2.             ip_hash; 
  3.             server 192.168.182.132:80; 
  4.             server 192.168.182.133:80; 
  5.          }   

 

这里有个地方需要注意,ip_hash是什么呢?上面我说的要求我们再看一次:当我们访问192.168.182.131/index.html 时,由于是静态页面,交给nginx本身处理,如果我们访问 192.168.182.131/test.php时,配置location匹配 .php 后缀,并交由后端apache集群来处理,至于集群会以什么样的方式来处理,后面用到时再说。

 

 
 
  1. ip_hash就是upstream的调度算法之一,以下列举nginx所支持的常用的3种调度算法: 
  2.  
  3. ip_hash: 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。 
  4.  
  5. 轮询: 每个请求按访问顺序分配不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响 。 
  6.  
  7. weight: 指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。 

而location的应用,案例中只举了很简单的用法:

 

  1.   location ~* .*.php$ { 
  2.              proxy_pass          http://MyServer; 
  3.      }  

 

 
 
  1. 首先应用了解location的几个匹配符: 
  2. 1 = 严格匹配这个查询。如果找到,停止搜索 
  3. 2 ^~ 匹配路径的前缀,如果找到,停止搜索 
  4. 3 ~  为区分大小写的正则匹配 
  5. 4 ~* 不区分大小写的正则匹配 
  6.  
  7. 所以,代码中 
  8. location ~* .*.php$ 的意思就是,将.php结尾的url链接,发送到http://MyServer
  9. 后端服务器去处理,让后端去处理。
  10. 关于location的更深入理解可以看这篇文章: http://blog.csdn.net/fengmo_q/article/details/6683377

 配置后端apache集群服务器:

 

 
 
  1. 192.168.182.132 的配置如下: 
  2. [root@lvs3 ~]# yum install httpd -y 
  3. [root@lvs3 ~]# yum install php -y 
  4. 不做配置 
  5. [root@localhost html]# pwd 
  6. /var/www/html 
  7. [root@localhost html]# ls 
  8. test.php 
  9. 以下是test.php的内容: 
  10. [root@localhost html]# cat test.php  
  11. <?php 
  12.         print "192.168.182.132"; 
  13. ?> 
  14. [root@localhost html]#  
  15.  
  16.  
  17. 192.168.182.133 的配置如下: 
  18. [root@lvs3 ~]# yum install httpd -y 
  19. [root@lvs3 ~]# yum install php -y 
  20. 不做配置 
  21. [root@localhost html]# pwd 
  22. /var/www/html 
  23. [root@localhost html]# ls 
  24. test.php 
  25. 以下是test.php的内容: 
  26. [root@localhost html]# cat test.php  
  27. <?php 
  28.         print "192.168.182.133"; 
  29. ?> 
  30. [root@localhost html]#  

整天过程就这样完成了。算是了解了nginx的负载均衡的大致过程 。以后再深入学习。这篇学习笔记就到此为止啦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值