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

本文目录:
1 正向代理
2 反向代理
 2.1 简单的反向代理配置
 2.2 负载均衡:后端成员
 2.3 故障转义failover
 2.4 提供负载状态显示页面
 2.5 proxy相关指令
  2.5.1 ProxyPass指令
  2.5.2 ProxyPassMatch指令
  2.5.3 ProxySet指令
  2.5.4 < Proxy >容器
  2.5.5 ProxyStatus指令
  2.5.6 ProxyVia指令
3 健康状况检查模块

代理方式有两种:正向代理和反向代理。

正向代理是为客户端转发请求,各客户端将请求交给正向代理服务器,正向代理服务器再负责转发给服务端,响应时服务端先响应给正向代理服务器,正向代理服务器再转发给对应的客户端。也就是说,正向代理是为局域网内客户端做代理,它扮演的角色类似于NAT。

反向代理是为服务端转发请求,客户端将请求发送至反向代理服务器,反向代理服务器再将请求转发给真正的服务器以处理请求,响应时后端真正的服务器将处理结果发送给反向代理,再由反向代理构建响应并响应给客户端。

1 正向代理

httpd通过ProxyRequests指令配置正向代理的功能。例如:

ProxyRequests On ProxyVia On <Proxy "*"> Require host internal.example.com </Proxy>

其中< Proxy >容器表示的是只有internal.example.com下的主机可以通过该正向代理去访问任意URL的请求内容。ProxyVia指令表示在响应首部中添加一个Via字段。

2 反向代理

为了成为一个"基本的"web server,提供静态和动态内容给最终用户,httpd(以及其他大多数web server)可以扮演反向代理服务器的角色,也就是众所周知的"网关"服务器。

在这种场景下,Httpd自身不生成产出数据,而是从后端服务器中获取数据,这些后端服务器器一般不会和外界网络通信。当httpd从客户端接收到请求,请求被代理到后端服务器组中的其中一个服务器上,该后端服务器处理请求,生成内容并返回内容给httpd server,最后由httpd server生成实际的HTTP响应给客户端。

有无数应该使用反向代理的理由,最常见的是安全、高可用、负载均衡、集中授权/认证。反向代理的布置和架构中,后端服务器(真正处理请求的服务器)和外界完全绝缘并由此受到保护,对于外界客户端来说,当他们需要关心服务器对象是谁时,它们得到的结果总是反向代理服务器,而非后端服务器。

一个典型的实现如下:

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

2.1 简单的反向代理配置

ProxyPass指令用于映射请求到后端服务器。最简单的代理示例是对所有请求"/"都映射到一个后端服务器上:

ProxyPass "/" "http://www.example.com/" ProxyPassMatch "^/((?i).*\.php)$" "fcgi://127.0.0.1:9000/var/www/a.com/$1"

为了地址重定向时也能正确使用反向代理,应该使用ProxyPassReverse指令。

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

或者只为特定的URI进行代理,例如下面的配置,只有/images开头的路径才会代理转发,其他的所有请求都在本地处理。

ProxyPass "/images" "http://www.example.com/" ProxyPassReverse "/images" "http://www.example.com/"

假如本地服务器地址为,当请求时,将代理为。

2.2 负载均衡:后端成员

上面的配置中没有添加后端服务器节点,无法享受反向代理的优点。因此,有必要添加后端节点。添加的方法是使用< proxy >容器将后端节点定义成一个负载均衡组,各节点是该组中成员,然后代理目标指向组名即可。

例如:

<Proxy balancer://myset> BalancerMember http://www2.example.com:8080 BalancerMember http://www3.example.com:8080 ProxySet lbmethod=bytraffic </Proxy> ProxyPass "/images/" "balancer://myset/" ProxyPassReverse "/images/" "balancer://myset/"

balancer://myset告诉httpd,它创建了一个负载均衡节点集合,名称为myset,此集合中有两个后端成员。在上面的配置中,任意/images的请求都会代理至2个成员中的一个。ProxySet指令指定myset均衡组使用的均衡算法为bytraffic,即基于I/O流量字节数权重的算法。ProxySet指令设置的是Proxy容器的公共属性

httpd有3种复杂均衡算法:

byrequests:默认。基于请求数量计算权重。

bytraffic:基于I/O流量大小计算权重。

bybusyness:基于挂起的请求(排队暂未处理)数量计算权重。

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

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