apache 配置反向代理和负载均衡
开启反向代理模块:
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 按照这样的顺序访问

