正向代理是一个位于客户端和原始服务器(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。