apache配置反向代理和负载均衡

发布于 2019-09-23  115 次阅读


 

开启反向代理模块:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.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

反向代理

 

1.ProxyPass指令

在反向代理到后端的url后,path是不会带过去的。此指令不支持正则。

可以使用在server config ,location,virtualhost中使用

用法:

ProxyPass [path]  ! | url

 

2.ProxyPassReverse指令

此指令一般和ProxyPass指令配合使用。

通过此指令,可以避免  在Apache作为反向 代理使用时,后端服务器的HTTP重定向造成绕过反向代理的问题。

用法:

ProxyPassReverse [path]  ! | url

 

3.ProxyPassMatch指令

用法同ProxyPass,此指令支持正则

ProxyPass [path]  ! | url

 

例子:

全站代理:

ProxyPass "/" "http://www.test.com"
ProxyPassReverse "/" "http://www.test.com"

要为特定的URI进行代理,其它的所有请求都在本地处理,可执行如下配置:

ProxyPass "/images"  "http://www.test.com"

当客户端请求http://www.soulchild.cn/images/server.gif 这个URL时,apache将请求后端服务器http://www.test.com/server.gif 地址,注意,这里在反向代理到后端的url后,/images这个路径没有带过去。

注意:如果第一个参数path结尾添加了一个斜杠,则url部分也必须添加了一个斜杠

加斜杠

ProxyPass "/img/flv/"  "http://www.abc.com/isg/"

 

对某个路径不做代理转发:

ProxyPass / images/ !

 

使用正则:

ProxyPassMatch  ^(/.*.gif)  http://www.static.com/$1

负载均衡:

 

3种负载均衡算法,分别是:

byrequests:默认。按照请求次数平均分配

可以手动指定权重,权重越大访问越多:loadfactor=xx

 

bytraffic:按照I/O流量大小平均分配

bybusyness:按照挂起的请求(排队暂未处理)数量计算。分配给活跃请求数最少的服务器

 

编辑配置文件

vim /usr/local/apache2/conf/extra/site1.conf

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/usr/local/apache2/docs/site1"
    ServerName apache.test.com
    ErrorLog "logs/apache.test.com-error_log"
    CustomLog "logs/apache.test.com-access_log" common

    <Proxy balancer://soulchild>
        BalancerMember http://10.0.0.239  loadfactor=2  
        BalancerMember http://10.0.0.140:81
        ProxySet lbmethod=byrequests
    </Proxy>
    
    proxypass / balancer://soulchild
    proxypassreverse / balancer://soulchild
</VirtualHost>

loadfactor=2可以实现,访问2次10.0.0.239,访问1次10.0.0.140按照这样的顺序访问

 

 

 

 

 


何来人间惊鸿客,只是尘世一俗人