正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。APACHE正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。

APACHE使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

一、环境准备:

# dmidecode|grep "System Information" -A9|egrep "Manufacturer|Product"

Manufacturer: Dell Inc.

Product Name: PowerEdge R630

# uname -a

Linux linux-node2 3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

关闭firewalld,selinux

#yum install -y gcc glibc gcc-c++ make screen tree lrzsz wget curl vim

后端httpd运行监控8080端口

#YUM安装

#yum install -y apr-devel apr-util-devel prce-devel openssl-devel(安装依赖)

# cd /usr/local/src

# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.33.tar.gz(下载源码包)

将apr和apr-util包下载解压到http包目录/usr/local/src/httpd-2.4.33/srclib下并掉版本号

增加编译条件./configure's --with-included-apr

#./configure --with-included-apr --prefix=/usr/local/apache2 --enable-so --enable-modules="all"

# make && make install

修改配置文件的ServerName ms01.unicom.com

/usr/local/apache2/conf/extra/httpd-proxy.conf

#proxy ms01.unicom.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 lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

#reverse proxy

ProxyRequests Off

#define cluster

<Proxy "balancer://mycluster">

BalancerMember http://192.168.119.110:8080

BalancerMember http://192.168.119.111:8080

</Proxy>

#define jump

ProxyPass "/demo" "balancer://mycluster/"

ProxyPassReverse "/demo" "balancer://mycluster/"

#loadbalance admin

<Location "/balancer-manager">

SetHandler balancer-manager

order Deny,Allow

Allow from all

#Deny from all

#Allow from localhost

#Require host example.com

</Location>


loadbalance测试:

修改默认主页内容:

#cp /usr/share/httpd/noindex/index.html /usr/share/httpd/noindex/index.html.bak

#echo "ms02.unicom.com" >/usr/share/httpd/noindex/index.html

#cp /usr/share/httpd/noindex/index.html /usr/share/httpd/noindex/index.html.bak

# echo "ms01.unicom.com" >/usr/share/httpd/noindex/index.html


 

负载比例分配

loadfactor取值范围为1-100

ProxyRequests Off

<Proxy "balancer://mycluster">

    BalancerMember http://192.168.119.110:8080 loadfactor=6

    BalancerMember http://192.168.119.111:8080 loadfactor=4

    BalancerMember http://192.168.119.112:8080 loadfactor=2

</Proxy>

ProxyPass "/" "balancer://mycluster/"

ProxyPassReverse "/" "balancer://mycluster/"

负载分配算法

lbmethod取值有:

lbmethod=byrequests 按照请求次数均衡(默认)

lbmethod=bytraffic 按照流量均衡

lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

lbmethod=heartbeat按照具有更大准备(空闲)容量的服务器调用

ProxyRequests Off

<Proxy "balancer://mycluster">

    BalancerMember http://192.168.119.110:8080 loadfactor=6

    BalancerMember http://192.168.119.111:8080 loadfactor=4

    BalancerMember http://192.168.119.112:8080 loadfactor=2

</Proxy>

ProxyPass "/" "balancer://mycluster/"

ProxyPassReverse "/" "balancer://mycluster/"

ProxySet lbmethod=bytraffic

热备份

ProxyRequests Off

<Proxy balancer://mycluster>

    BalancerMember http://192.168.119.110:8080

    BalancerMember http://192.168.119.111:8080 status=+H

</Proxy>

ProxyPass "/" "balancer://mycluster/"

ProxyPassReverse "/" "balancer://mycluster/"

请求总是流向192.168.119.110,一旦192.168.119.110挂掉, apache会检测到错误并把请求分流给192.168.119.111。