Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1734568
  • 博文数量: 391
  • 博客积分: 8464
  • 博客等级: 中将
  • 技术积分: 4589
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 15:12
个人简介

狮子的雄心,骆驼的耐力,孩子的执著!

文章分类

全部博文(391)

文章存档

2023年(4)

2018年(9)

2017年(13)

2016年(18)

2014年(7)

2013年(29)

2012年(61)

2011年(49)

2010年(84)

2009年(95)

2008年(22)

分类: 系统运维

2016-12-17 12:18:41

关于apache反向代理实现负载均衡,编译mod_proxy模块解决办法,利用做集群,有好几种方式:
一:查看是否有mod_proxy模块功能
  1. [root@localhost ~]# /usr/local/apache/bin/httpd -l
  2. [root@localhost ~]# /usr/local/apache/bin/httpd -M
可以看到是否有mod_proxy的模块,直接去 /usr/local/apache/modules/ 去查看是否有对应的mod_proxy.so,mod_proxy_balancer.so,mod_proxy_http.so,mod_proxy_ajp.so的模块包
二:已经安装好的apache不过没有编译此模块要自己动手编译
  1. [root@localhost ~]# cd /usr/local/src/httpd-2.2.31/modules/proxy
  2. [root@localhost proxy]# /usr/local/apache/bin/apxs -c -i mod_proxy.c proxy_util.c
  3. [root@localhost proxy]# /usr/local/apache/bin/apxs -c -i mod_proxy_balancer.c
  4. [root@localhost proxy]# /usr/local/apache/bin/apxs -c -i mod_proxy_http.c
安装proxy_ajp模块
  1. [root@localhost proxy]# /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.  
  5. ProxyRequests Off
  6. <Proxy balancer://clusterphpinfo>
  7. BalancerMember http://192.168.1.101:8080 loadfactor=5
  8. BalancerMember http://192.168.1.100:8080 loadfactor=1
  9. ProxySet lbmethod=bytraffic
  10. </Proxy>
  11. ProxyPass /t2 balancer://clusterphpinfo stickysession=STICK_PORT_TOKEN nofailover=On
  12. ProxyPassReverse /t2 balancer://clusterphpinfo
  13.  
  14. <Location /balancer-manager>
  15. SetHandler balancer-manager
  16. Order Deny,Allow
  17. Allow from all
  18. </Location>

配置说明:

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

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

另附:Linux apache单独编译mod_rewrite.so

1.寻找apache源码安装目录中的mod_rewrite.c文件
#find / -name mod_rewrite.c
/usr/httpd-2.2.22/modules/mappers/mod_rewrite.c

2.切换到mod_rewrite.c文件目录
#cd /usr/httpd-2.2.22/modules/mappers/

3.编译
#/usr/apache/Apache2.2/bin/apxs -c mod_rewrite.c 
#/usr/apache/Apache2.2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
在/usr/apache/Apache2.2/modules中会编译好mod_rewrite.so

4.如果是Apache2.2.22版本
LoadModule mod_rewrite_module modules/mod_rewrite.so 前面添加#注释符;

 1 . 如何让自己的本地APACHE服务器支持.htaccess
如何让自己的本地APACHE服务器支持".htaccess"呢?其实只要简单修改一下apache的httpd.conf设置就可以让APACHE支持.htaccess了,来看看操作

打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),用文本编辑器打开后,查找
(1)
Options FollowSymLinks
AllowOverride None

改为
Options FollowSymLinks
AllowOverride All

(2)去掉下面的注释
LoadModule rewrite_module modules/mod_rewrite.so

就可以了


阅读(2438) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~