反向代理负载均衡之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 环境准备:两台虚拟机

在两台机器部署apache作为RS

第一台

[root@linux-node1 ~]# hostname
linux-node1.example.com
[root@linux-node1 ~]# uname -r
2.6.32-504.el6.x86_64
[root@linux-node1 ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@linux-node1 ~]# tail -3 /etc/hosts
192.168.230.128  linux-node1.example.com
192.168.230.129     linux-node2.example.com

yum安装httpd做RS节点

[root@linux-node1 ~]#  sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf

[root@linux-node1 ~]# echo "check-test1" > /var/www/html/index.html

[root@linux-node1 ~]# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]

[root@linux-node1 ~]# netstat -ntpl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

tcp        0      0 0.0.0.0:22682               0.0.0.0:*                   LISTEN      1008/sshd          

tcp        0      0 :::22682                    :::*                        LISTEN      1008/sshd          

tcp        0      0 :::8080                     :::*                        LISTEN      3907/httpd

第二台上安装httpd作为RS节点,同上,同时编译安装作为httpd反向代理

安装基础环境包

yum -y install apr-devel apr-util-devel pcre-devel openssl-devel gcc-c++

下载

wget http://archive.apache.org/dist/httpd/httpd-2.4.23.tar.gz

centos 6.6 默认的APR和APR-Util版本低 ,需要安装新的 ,如下官方介绍

APR and APR-Util
    Make sure you have APR and APR-Util already installed on your system. If you don't, or prefer to not use the system-provided versions, download the latest versions of both APR and APR-Util from Apache APR, 
    unpack them into /httpd_source_tree_root/srclib/apr and /httpd_source_tree_root/srclib/apr-util (be sure the directory names do not have version numbers; for example, 
    the APR distribution must be under /httpd_source_tree_root/srclib/apr/) and use ./configure's --with-included-apr option. On some platforms, you may have to install the 
    corresponding -dev packages to allow httpd to build against your installed copy of APR and APR-Util

       下载新的apr和apr-util

[root@linux-node1 src]# ls
apr-1.4.5.tar.gz  apr-util-1.5.1.tar.gz 

解压到http源码的srclib目录,不能带版本号

root@linux-node1 httpd-2.4.23]# ls srclib/
apr  apr-util  Makefile  Makefile.in

后面加上--with-included-apr

[root@linux-node1 src]# ./configure --prefix=/usr/local/httpd-2.4.23 --enable-so --enable-modules="all" --with-included-apr
如果是centos 7 系统用以下
./configure --prefix=/usr/local/httpd-2.4.18 --enable-so --enable-modules="all"

[root@linux-node2 httpd-2.4.23]# make && make install
[root@linux-node2 http-2.4.23]# ln -s /usr/local/httpd-2.4.3 /usr/local/httpd

 

测试配置并启动

[root@linux-node2 httpd-2.4.23]# /usr/local/httpd/bin/apachectl -t
Syntax OK
[root@linux-node2 httpd-2.4.23]# /usr/local/httpd/bin/apachectl -k start

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

[root@linux-node2 extra]# pwd  #路径
/usr/local/httpd-2.4.23/conf/extra
[root@linux-node2 extra]# cat httpd-proxy.conf 
#www.check-blog.com
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module  modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
ProxyRequests Off
<Proxy balancer://check-cluster>
BalancerMember http://192.168.230.129:8080
BalancerMember http://192.168.230.128:8080
</Proxy>
ProxyPass /demo balancer://check-cluster
ProxyPassReverse /demo balancer://check-cluste

#www.check-blog.com
LoadModule proxy_module modules/mod_proxy.so  #proxy模块
LoadModule proxy_connect_module modules/mod_proxy_connect.so  #链接的模块
LoadModule proxy_http_module modules/mod_proxy_http.so #给http做代理模块
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #负载均衡模块
LoadModule lbmethod_byrequests_module  modules/mod_lbmethod_byrequests.so  #算法模块,根据server的请求量
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so   #算法模块,根据server流量
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so  #算法模块,根据server繁忙程度
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #
ProxyRequests Off    #如果没有对服务器采取安全措施之前,请不要开启此项
<Proxy balancer://check-cluster>  #lb集群组的名称
BalancerMember http://192.168.230.129:8080  #集群组成员
BalancerMember http://192.168.230.128:8080  #集群组成员
</Proxy>
ProxyPass /demo balancer://check-cluster  #跳转,和lb集群组名称对应,访问demo
ProxyPassReverse /demo balancer://check-cluster  
将刚才的文件包含
[root@linux-node2 extra]# vim /usr/local/httpd-2.4.23/conf/httpd.conf +482
# Proxy demo
Include  conf/extra/httpd-proxy.conf
检查语法
[root@linux-node2 extra]# /usr/local/httpd/bin/apachectl -t
Syntax OK
重启
[root@linux-node2 extra]# /usr/local/httpd/bin/apachectl -k restart

apache增加一个管理,并重启

[root@linux-node2 extra]# cat httpd-proxy.conf 
#www.check-blog.com
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module  modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
ProxyRequests Off
<Proxy balancer://check-cluster>
BalancerMember http://192.168.230.129:8080
BalancerMember http://192.168.230.128:8080
</Proxy>
ProxyPass /demo balancer://check-cluster
ProxyPassReverse /demo balancer://check-cluste
<Location /manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Allow from all
</Location>
优雅重启
[root@linux-node2 extra]# ../../bin/apachectl -k graceful

增加虚拟主机生效

[root@linux-node2 extra]# cat httpd-proxy.conf 
#www.check-blog.com
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module  modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
ProxyRequests Off
<Proxy balancer://check-cluster>
BalancerMember http://192.168.230.129:8080
BalancerMember http://192.168.230.128:8080
</Proxy>
ProxyPass /demo balancer://check-cluster
ProxyPassReverse /demo balancer://check-cluste
<Location /manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Allow from all
</Location>
<VirtualHost *:80>
    ServerAdmin webmaster@check-blog.com
    DocumentRoot "/opt"
    ServerName www.check-blog.com
    ServerAlias check-blog.com
    ErrorLog "logs/www.check-blog.com-error_log"
    CustomLog "logs/www.check-blog.com-access_log" common
    ProxyPass / balancer://check-cluster
    ProxyPassReverse / balancer://check-cluster
</VirtualHost>
重启
[root@linux-node2 extra]# ../../bin/apachectl -k graceful

本地电脑解析

192.168.230.128 www.check-blog.com  check-blog.com

其他参数讲解

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

http://httpd.apache.org/docs/2.4/mod/mod_proxy.html

原文地址:https://www.cnblogs.com/w787815/p/6658269.html