Apache httpd反向代理使用详细分析(2)

对于上面的示例,还可以稍加修改,使其支持更多功能。例如添加权重比例,使得某后端节点被转发到的权重是另一节点的3倍,等待后端节点返回数据的超时时间为1秒。

<Proxy balancer://myset> BalancerMember http://www2.example.com:8080 BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 ProxySet lbmethod=byrequests </Proxy> ProxyPass "/images" "balancer://myset/" ProxyPassReverse "/images" "balancer://myset/" 2.3 故障转移

还可以再次调整实现故障转移,例如当所有负载节点都失败时,指定一个备份节点(standby node)。参考如下配置:

<Proxy balancer://myset> BalancerMember http://www2.example.com:8080 BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 BalancerMember http://hstandby.example.com:8080 status=+H BalancerMember http://bkup1.example.com:8080 lbset=1 BalancerMember http://bkup2.example.com:8080 lbset=1 ProxySet lbmethod=byrequests </Proxy> ProxyPass "/images/" "balancer://myset/" ProxyPassReverse "/images/" "balancer://myset/"

其中成员1、2、4、5是负载节点,成员3是备份节点。当所有负载节点都不健康时,将转发请求给备份节点,并由备份节点处理请求,httpd设置备份节点的方式很简单,只需将状态设置为"H",表示hot-standby。还需注意的是负载节点4、5,它们额外的参数为lbset=1,不写时默认为0,这是负载均衡时的优先级设置,负载均衡时总是先转发给低数值的节点,也就是说或数值越小,优先级越高。所以上面的配置中,当节点1、2正常工作时,只在它们之间进行负载,此时节点4、5处于闲置状态。只有当节点1、2都失败时,才会在节点4、5之间进行负载。

2.4 提供负载状态显示页面 <Location "/bm"> SetHandler balancer-manager Require host localhost Require ip 192.168.100 </Location>

然后在浏览器中输入即可,返回结果如图。

Apache httpd反向代理使用详细分析

2.5 proxy相关指令 2.5.1 ProxyPass指令

该指令将远程服务器映射到本地主机上,但本地主机不是真实的服务器,而是远程主机的一个镜像。这个镜像通常称为反向代理服务器或网关。该指令不能用于< Directory >、< Files >容器中,且使用该指令时通常会关闭正向代理,即ProxyRequests=off。

语法:

ProxyPass [path] !|url [key=value [key=value ...]]

path参数为本地主机的URL路径,url参数为远程服务器的url一部分,不能包含查询参数。如果第一个参数path尾随了斜线,则url部分也必须尾随斜线,反之亦然。如果该指令封装在< Location >容器中,则第一个参数path可以省略,因为Location中���经指定了URL路径。如果第二个参数为"!",则表示此path不使用反向代理功能。

例如:

<Location "/mirror/foo/"> ProxyPass "http://backend.example.com/foo/" </Location>

当访问时,将转发到主机上,并请求该主机的/foo/bar文件。下面的配置指令与此等价。

ProxyPass "/mirror/foo/" "http://backend.example.com/foo/"

如果想让某个子目录不进行反向代理,而是在本地处理。可以设置第二个参数为"!"。例如,下面的配置中,/mirror/foo会被代理,但/mirror/foo/i则不会被代理。

ProxyPass "/mirror/foo/i" "!" ProxyPass "/mirror/foo" "http://backend.example.com"

再需要说明的是连接池,httpd会为后端节点创建连接池,httpd会连接连接池中的各个节点。后端节点属性相同的共享一个连接池。后端节点的属性由key=value参数指定。以下是常见的一些属性设置,完整的属性见官方手册

keepalive=Off|On:默认为Off。设置httpd和后端节点之间是否开启长连接,注意,这和web服务的长连接不一样,此处设置的是反向代理服务器和后端节点两者连接,当httpd将请求转发给连接池中的一个节点,并等待返回数据,当数据返回完成后,连接立即关闭,如果开启了长连接,连接暂时不关闭,只有等待均衡算法下次轮到该节点时才会再使用该连接。通常只有在httpd和后端节点间使用了防火墙时才设置为On。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e1e1306a0f5976525823fa08e8996c52.html