例如,下面的设置了只有yournetwork.example.com下的主机才能通过该(正向或反向代理)服务器访问任意请求的内容(使用了*进行通配)。
<Proxy "*"> Require host yournetwork.example.com </Proxy> <Proxy "balancer://hotcluster"> BalancerMember "http://www2.example.com:8080" loadfactor=1 BalancerMember "http://www3.example.com:8080" loadfactor=2 ProxySet lbmethod=bytraffic </Proxy> 2.5.5 ProxyStatus指令ProxyStatus {on|off|full}决定是否开启server-status中关于proxy的状态信息,默认为off,full是on的同义词。
例如:
ProxyStatus on <Location "/server-status"> SetHandler server-status Require all granted </Location>以下是关于proxy相关的状态示例:
---------------------------------------------------------------------- Proxy LoadBalancer Status for balancer://myset SSes Timeout Method - 0 byrequests Sch Host Stat Route Redir F Set Acc Wr Rd http 192.168.100.14 Init Ok 1 0 0 0 0 http 192.168.100.15 Init Ok 3 0 0 0 0 http 192.168.100.54 Init Stby Ok 1 0 0 0 0 http 192.168.100.16 Init Ok 1 1 0 0 0 http 192.168.100.21 Init Ok 3 1 0 0 0 ---------------------------------------------------------------------- SSes Sticky session name Timeout Balancer Timeout Sch Connection scheme Host Backend Hostname Stat Worker status Route Session Route Redir Session Route Redirection F Load Balancer Factor Acc Number of uses Wr Number of bytes transferred Rd Number of bytes read 2.5.6 ProxyVia指令是否在响应首部中添加"Via:"字段。可以设置为On/Off等。例如如设置为On时:
[root@xuexi ~]# curl -I HTTP/1.1 200 OK Date: Sun, 01 Oct 2017 18:10:17 GMT Server: Apache/2.4.27 (Unix) Last-Modified: Sun, 01 Oct 2017 14:10:48 GMT ETag: "29-55a7cd31f2329" Accept-Ranges: bytes Content-Length: 41 Content-Type: text/html; charset=UTF-8 Via: 1.1 customer.sharktech.net 2.6 ProxyPass指令的排序和共享问题ProxyPass指令有个需要注意的问题,在匹配生效时,最先被匹配到的指令立即生效,后面的都将失效。但如果ProxyPass指令放在< Location >容器中时,由于容器中只能放置一个ProxyPass指令(因为path参数一样),此时匹配越精确的越优先。
例如下面的指令,如果将两个ProxyPass指令位置调换,则/mirror/foo/i也仍会被代理。
ProxyPass "/mirror/foo/i" "!" ProxyPass "/mirror/foo" "http://backend.example.com"可以将它们分别定义到< Location >容器中,这样就无需考虑位置顺序,而是考虑匹配的精确程度,因为Location容器自身有加载顺序优先级。例如,下面的配置是可行的。
<Location "/mirror/foo/"> ProxyPass "http://backend.example.com/" </Location> <Location "/mirror/foo/i"> ProxyPass "!" </Location>还需考虑一个共享的问题。下面两个指令中的url参数各有长短,且第一个url是第二个url的子串。这时第二个ProxyPass的属性部分总是会使用第一个指令的属性。因此/examples/bar的请求被转发到backend.example.com/examples/bar时,它的属性timeout=60而非10。这样的属性共享可以减少创建连接池,相对来说更有效一些。
ProxyPass "/apps" "http://backend.example.com/" timeout=60 ProxyPass "/examples" "http://backend.example.com/examples" timeout=10 3 健康状况检查模块ProxyPass指令自带了ping属性,可用于简单判断后端节点是否健康,只要Ping能通信就认为是健康的。但显��,对于Http服务来说,健康的指标并不能简单地通过它来判断。例如,检测某个页面是否正常、是否允许某方法等。因此,httpd提供了一个专门的健康状况检查模块mod_proxy_hcheck用于个性化订制检查指标。
检查指标也即检查方法有以下几种,由hcmethod指定:
TCP:检查是否能与后端节点建立TCP套接字,这就是问对方"你还活着吗"。
OPTIONS:发送一个HTTP OPTIONS请求给后端节点。
HEAD:发送一个HTTP HEAD请求给后端节点。
GET:发送一个HTTP GET请求给后端节点。
该健康状况检查模块认为,只要HTTP方法的检查指标返回2xx或3xx状态码都认为是健康的。
指定了检查方法后,还需订制检查的细节,例如检查的时间间隔。包括以下几项:
hcinterval:默认为30秒。发送检查的时间间隔,单位为秒。
hcuri:健康检查时,追加在URL后的URI。通常用于GET检查方法。
hcpasses:默认为1。表示只有检查了N次后都是通过的,才认为该节点是健康的可再次启用。
hcfails:默认为1。表示只有检查了N次后都是失败的,才认为该节点已经不健康,于是禁止使用该节点。