首页 > 网站 > Apache > 正文

apache反向代理实现负载均衡,编译mod_proxy模块

2024-08-27 18:22:26
字体:
来源:转载
供稿:网友

利用apache和tomcat做集群,有好几种方式我们来介绍一种方法。

一:查看是否有mod_proxy模块功能

  1. [i5a6]# /usr/local/apache/bin/httpd -l 

可以看到是否有mod_proxy的模块,直接去 /usr/local/apache/modules/ 去查看是否有对应的mod_proxy.so,mod_proxy_balancer.so,mod_proxy_http.so,mod_proxy_ajp.so的模块包

二:本人的是vps已经安装好的apache不过没有编译此模块要自己动手编译

  1. [i5a6]# find / -name mod_proxy.c 

注释:我是不知道它的安装目录,直接根目录下检索吧,主要是找对应的模块文件夹;执行结果:

  1. :/home/cpeasyapache/src/httpd-2.2.17/modules/proxy/mod_proxy.c 
  2. [i5a6]# cd /home/cpeasyapache/src/httpd-2.2.17/modules/proxy/ 
  3. [i5a6]# /usr/local/apache/bin/apxs -c -i mod_proxy.c proxy_util.c 
  4. [i5a6]# /usr/local/apache/bin/apxs -c -i mod_proxy_balancer.c 
  5. [i5a6]# /usr/local/apache/bin/apxs -c -i mod_proxy_http.c 
  6. # 安装proxy_ajp模块 
  7. [i5a6]# /usr/local/apache/bin/apxs -c -i mod_proxy_ajp.c ajp_header.c ajp_utils.c ajp_msg.c ajp_link.c 

可以去 /usr/local/apache/modules/ 看下生成了对应mod_proxy.so,mod_proxy_balancer.so,mod_proxy_http.so,mod_proxy_ajp.so的包。

三:配置httpd.conf,设置权重和session严格复制等。

  1. LoadModule proxy_module modules/mod_proxy.so   
  2. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so   
  3. LoadModule proxy_http_module modules/mod_proxy_http.so   
  4. ProxyRequests Off   
  5. <Proxy balancer://clusterphpinfo>   
  6. BalancerMember http://192.168.1.101:8080 loadfactor=5   
  7. BalancerMember http://192.168.1.100:8080 loadfactor=1   
  8. ProxySet lbmethod=bytraffic   
  9. </Proxy>   
  10. ProxyPass /t2 balancer://clusterphpinfo stickysession=STICK_PORT_TOKEN nofailover=On  
  11. ProxyPassReverse /t2 balancer://clusterphpinfo   
  12. <Location /balancer-manager>   
  13. SetHandler balancer-manager   
  14. Order Deny,Allow   
  15. Allow from all   
  16. </Location> 

配置说明:

1,平衡算法,由byrequests变成bytraffic

2,由平均分配变成非平均分配

另一个虚拟主机配置:

  1. <VirtualHost *:80> 
  2. ServerName  hs.i5a6.com 
  3. ServerAlias i5a6.com 
  4. DocumentRoot "/usr/local/apache/htdocs/hs" 
  5. ProxyPass /hs  ajp://127.0.0.1:8009/hs 
  6. ProxyPassReverse /hs ajp://127.0.0.1:8009/hs 
  7. </VirtualHost> 
  8. <Proxy balancer://mycluster> 
  9. BalancerMember http://127.0.0.1:8181/hs  loadfactor=40 
  10. BalancerMember http://127.0.0.1:8282/hs loadfactor=40 
  11. BalancerMemberhttp://127.0.0.1:8080/hs loadfactor=10 
  12. BalancerMember http://127.0.0.1:8081/hs loadfactor=10 
  13. #热备,如果8181服务挂掉,apache会自动把请求发送到8282,如果8181恢复服务,apache会把请求发送到8181 
  14. #BalancerMember http://127.0.0.1:8282 status=+H 
  15. </Proxy>  
  16. <VirtualHost *:80> 
  17. ServerName hs.i5a6.com 
  18. DocumentRoot "/usr/local/apache/htdocs/hs" 
  19.       #内部的请求 /hs/ 代理 balancer://mycluster/ 模块的请求 
  20.       #ProxyPass /hs/ balancer://mycluster/ 
  21.  
  22.    #stickysession session的性质,是否具有粘性 
  23.    #nofailover=On不支持会话复制 
  24.    #lbmethod 负载均衡的算法,lbmethod可能的取值有: 
  25.    #lbmethod=byrequests 按照请求次数均衡(默认) 
  26.    #lbmethod=bytraffic 按照流量均衡 
  27.    #lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器) 
  28.    #maxattempts=1 apache在放弃服务前,尝试的次数 
  29.    ProxyPass /hs/ balancer://mycluster/ stickysession=STICK_PORT_TOKEN nofailover=On lbmethod=byrequests maxattempts=1 
  30.    ProxyPassReverse /hs balancer://mycluster/ 
  31.    #调整由反向代理服务器发送的HTTP应答头中的URL. 
  32.    #根据代理打开 balancer://mycluster/ 模块的a.html 
  33.    #如果点击a.html页面的内部链接(绝对路径另论),需要这个设置将路径修改为代理的路径. 
  34. </VirtualHost> 

apache 反向代理出现内网ip解决方法

apache中设置如下反向代理后端的tomcat出现request.getServerName();获取到的主机名称就会是localhost,解决这个

  1. <VirtualHost *:80> 
  2.     ServerAdmin service@i5a6.com 
  3.     DocumentRoot /usr/local/apache/htdocs 
  4.     ServerName i5a6.com 
  5.     ServerAlias *.i5a6.com 
  6.      DirectoryIndex  index.html  index.html.var  index.jsp 
  7.      ProxyPass / http://localhost:8080/ 
  8.      ProxyPassReverse / http://localhost:8080/ 
  9.      ErrorLog "logs/hscode-error.log" 
  10.      CustomLog "logs/hscode-access.log" common 
  11. </VirtualHost>  

在httpd.conf 文件中增加:ProxyPreserveHost On 即可,对应的nginx 也有此问题解决之法:

  1. proxy_set_header Host $host; 
  2. upstream mytomcat{ 
  3.  #server 127.0.0.1:8000 weight=3; 
  4.  #server 127.0.0.1:8001; 
  5.  #server 127.0.0.1:8002; 
  6.  server 127.0.0.1:8080; 
  7.  } 
  8.  
  9. server 
  10. listen 80; 
  11. server_name i5a6.com *.i5a6.com; 
  12. index index.html index.htm ; 
  13. root /usr/local/data/htdocs/www; 
  14.  
  15. location / { 
  16. # proxy_set_header Host %host; 
  17. # proxy_set_header X-Forwarded-For $remote_addr; 
  18.  proxy_pass http://www.Vevb.com; 
  19. proxy_set_header Host $host; 
  20.  } 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表