反向代理负载均衡之apache

一、反向代理

1.1 介绍反响代理

  反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

1.2 反向代理的工作方式

  通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。
  反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。

1.3 反向代理的作用

1.3.1 保护网站安全

任何来自Internet的请求都必须先经过代理服务器

1.3.2 配置缓存功能加速Web请求

可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力

1.3.3 实现负载均衡

充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力

二、使用apache实现反向代理实战

2.1 环境准备:两台虚拟机

第一台

  1. [root@linux-node1 ~]# uname -m
  2. x86_64
  3. [root@linux-node1 ~]# uname -r
  4. 3.10.0-229.el7.x86_64
  5. [root@linux-node1 ~]# cat /etc/hostname
  6. linux-node1.example.com
  7. [root@linux-node1 ~]# cat /etc/hosts
  8. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  9. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  10. 192.168.56.11 linux-node1.example.com
  11. 192.168.56.12 linux-node2.example.com
  12. [root@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
  13. [root@linux-node1 ~]# yum install -y gcc glibc gcc-c++ make screen tree lrzsz

第二台

  1. [root@linux-node2 ~]# uname -m
  2. x86_64
  3. [root@linux-node2 ~]# uname -r
  4. 3.10.0-229.el7.x86_64
  5. [root@linux-node2 ~]# cat /etc/hostname
  6. linux-node2.example.com
  7. [root@linux-node2 ~]# cat /etc/hosts
  8. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  9. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  10. 192.168.56.11 linux-node1.example.com
  11. 192.168.56.12 linux-node2.example.com
  12. [root@linux-node2 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
  13. [root@linux-node2 ~]# yum install -y gcc glibc gcc-c++ make screen tree lrzsz

2.2 部署应用实战

在两台机器部署apache作为RS
linux-node1.example.com

  1. [root@linux-node1 ~]# yum install -y httpd
  2. [root@linux-node1 ~]# sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
  3. [root@linux-node1 ~]# systemctl start httpd
  4. [root@linux-node1 ~]# echo "chuck-test2" > /var/www/html/index.html
  5. [root@linux-node1 ~]# curl http://192.168.56.11:8080/
  6. chuck-test1

linux-node2.example.com

  1. [root@linux-node2 ~]# yum install -y httpd
  2. [root@linux-node2 ~]# sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
  3. [root@linux-node2 ~]# systemctl start httpd
  4. [root@linux-node2 ~]# echo "chuck-test2" > /var/www/html/index.html
  5. [root@linux-node2 ~]# curl http://192.168.56.12:8080/
  6. chuck-test2

在linux-node1上编译安装apache作为反向代理服务器

  1. [root@linux-node1 ~]# yum install -y apr-devel apr-util-devel pcre-devel openssl-devel
  2. [root@linux-node1 ~]# cd /usr/local/src
  3. [root@linux-node1 src]# wget http://www-eu.apache.org/dist//httpd/httpd-2.4.18.tar.gz
  4. [root@vpn-node3 src]# tar zxf httpd-2.4.18.tar.gz
  5. [root@vpn-node3 src]# cd httpd-2.4.18/
  6. [root@linux-node1 httpd-2.4.18]# ./configure --prefix=/usr/local/httpd-2.4.18 --enable-so --enable-modules="all"
  7. [root@linux-node1 httpd-2.4.18]# make && make install
  8. [root@linux-node1 ~]# ln -s /usr/local/httpd-2.4.18/ /usr/local/httpd

编辑linux-node1的apache作为反向代理的配置文件

  1. [root@linux-node1 extra]# pwd
  2. /usr/local/httpd/conf/extra
  3. [root@linux-node1 extra]# cat httpd-proxy.conf
  4. #www.chuck-blog.com
  5. LoadModule proxy_module modules/mod_proxy.so #proxy模块
  6. LoadModule proxy_connect_module modules/mod_proxy_connect.so #链接的模块
  7. LoadModule proxy_http_module modules/mod_proxy_http.so #给http做代理模块
  8. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #负载均衡模块
  9. LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so #算法模块,根据server的请求量
  10. LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so #算法模块,根据server流量
  11. LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so #算法模块,根据server繁忙程度
  12. LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #
  13. ProxyRequests Off #如果没有对服务器采取安全措施之前,请不要开启此项
  14. <Proxy balancer://chuck-cluster> #lb集群组的名称
  15. BalancerMember http://192.168.56.11:8080 #集群组成员
  16. BalancerMember http://192.168.56.12:8080 #集群组成员
  17. </Proxy>
  18. ProxyPass /demo balancer://chuck-cluster #跳转,和lb集群组名称对应
  19. ProxyPassReverse /demo balancer://chuck-cluster

在apache的主配置文件include上述配置文件,并启动apache

  1. 486 Include conf/extra/httpd-proxy.conf
  2. [root@linux-node1 conf]# /usr/local/httpd/conf/bin/apachectl -k start
  3. netstat -lntup|grep 80
  4. tcp6 0 0 :::8080 :::* LISTEN 52541/httpd
  5. tcp6 0 0 :::80 :::* LISTEN 21903/httpd
  6. [root@linux-node2 html]# netstat -lntup|grep 80
  7. tcp6 0 0 :::8080 :::* LISTEN 29050/httpd

访问浏览器可以看到,不断在轮询两台RS


对apache增加一个管理,并重启

  1. [root@linux-node1 extra]#cat extra/httpd-proxy.conf
  2. #www.chuck---blog.com
  3. LoadModule proxy_module modules/mod_proxy.so
  4. LoadModule proxy_connect_module modules/mod_proxy_connect.so
  5. LoadModule proxy_http_module modules/mod_proxy_http.so
  6. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
  7. LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
  8. LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
  9. LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
  10. LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
  11. ProxyRequests Off
  12. <Proxy balancer://chuck-cluster>
  13. #BalancerMember http://192.168.56.11:8080
  14. BalancerMember http://192.168.56.12:8080
  15. </Proxy>
  16. ProxyPass /demo balancer://chuck-cluster
  17. ProxyPassReverse /demo balancer://chuck-cluster
  18. <Location /manager>
  19. SetHandler balancer-manager
  20. Order Deny,Allow
  21. Allow from all
  22. </Location>
  23. [root@linux-node1 conf]# ../bin/apachectl -k graceful

打开浏览器管理界面

增加虚拟主机生效

  1. [root@linux-node1 conf]# cat extra/httpd-proxy.conf
  2. #www.chuck---blog.com
  3. LoadModule proxy_module modules/mod_proxy.so
  4. LoadModule proxy_connect_module modules/mod_proxy_connect.so
  5. LoadModule proxy_http_module modules/mod_proxy_http.so
  6. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
  7. LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
  8. LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
  9. LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
  10. LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
  11. ProxyRequests Off
  12. <Proxy balancer://chuck-cluster>
  13. BalancerMember http://192.168.56.11:8080
  14. BalancerMember http://192.168.56.12:8080
  15. </Proxy>
  16. ProxyPass /demo balancer://chuck-cluster
  17. ProxyPassReverse /demo balancer://chuck-cluster
  18. <Location /manager>
  19. SetHandler balancer-manager
  20. Order Deny,Allow
  21. Allow from all
  22. </Location>
  23. <VirtualHost *:80>
  24. ServerAdmin webmaster@chuck-blog.com
  25. DocumentRoot "/opt"
  26. ServerName www.chuck-blog.com
  27. ServerAlias chuck-blog.com
  28. ErrorLog "logs/www.chuck-blog.com-error_log"
  29. CustomLog "logs/www.chuck-blog.com-access_log" common
  30. ProxyPass / balancer://chuck-cluster
  31. ProxyPassReverse / balancer://chuck-cluster
  32. </VirtualHost>

在本地电脑的host文件加入以下内容(过后要清理掉哦,否则无法访问我的博客了,嘎嘎)

  1. 192.168.56.11 www.chuck-blog.com chuck-blog.com

浏览器访问域名www.chuck-blog.com

2.3 其他参数讲解

详情请参看apache官网
设置权重:loadfactor
设置会话保持:stickysession
lb方式:默认是byrequest,也可以是bytraffic或者bybusyness

0
未经许可,不得转载,否则将受到作者追究,博主联系方式见首页右上角

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论
取消评论
代码 贴图 加粗 链接 删除线 签到