一、正向代理、反向代理
- 百度说,正向代理是内部机器通过代理及其访问外网信息的方式;方向代理是外部机器通过代理机器访问内网信息。
二、正向代理
- 设置
ProxyRequests On
即可; - 依赖三个模块:mod_proxy_connect、mod_proxy_http、mod_proxy
- 使用代理服务器:windows 中
开启代理,添加代理服务器ip即可 - 可以通过proxy标签来进行一些代理限制如利用
Require host xxxx
来限制某网址才可以通过此服务器访问; - 所以也可以
Require ip xxxx
- 也可以
Require user xxx
来进行用户限制。当验证方式为basic时,发现浏览器第一回访问需要用户、密码后续不需要,看请求也没看见authorization头,利用postman请求时发现添加一个Proxy-Authorization basic xxx(xxx为base64(账号:密码)值)即可,不知道浏览器的后续代理验证是什么方式。 - 多个require条件记得要用RequireAll或RequireAny标签包起来才生效。
三、反向代理
1.反向代理
ProxyPass /a http://baidu.com #代理传递,将百度映射到localhost/a
ProxyPassReverse /a http://baidu.com #代理反向传递,将修改由百度返回的响应头location、content-location、uri的url;
- 说这两个总是一起使用,定义之后访问/a,页面发生了跳转,跳转到了https://baidu.com,没能组织http到https的跳转
- 将命令的url改为https,报错,需要添加以下命令:
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
- cookie设置,暂时没研究
ProxyPassReverseCookieDomain "backend.example.com" "public.example.com"
ProxyPassReverseCookiePath "/" "/mirror/foo/"
2.集群和负载平衡
配置名为abc的负载平衡
<Proxy balancer://abc>
BalancerMember http://a.com:80 loadfactor=1 timeout=1
BalancerMember http://b.com:800 loadfactor=4 timeout=12
ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass / balancer://abc
ProxyPassReverse / balancer://abc
- 此配置依赖以下模块:
proxy_balancer_module(代理负载平衡模块)、slotmem_shm_module(基于插槽的共享内存模块)、lbmethod_bytraffic_module(基于流量加权的负载平衡算法模块)
- 成员使用顺序设定
a. 利用lbset=num
来设定成员集合,当小数字的成员都不可用时才会访问更大数字的成员集合。
b. 利用status=+xx或-xx
来设定每个成员的状态,来决定成员是否使用。+是添加状态,-是去除状态;D拒绝,S停止,I忽略错误,R热备,H热备中,E错误,N排除;
c.以上都可以在平衡器管理程序中动态设置。
3.平衡器管理
- 开启
<Location "/balancer-manager">
SetHandler balancer-manager
Require host localhost
</Location>
- 使用
访问localhost/balancer-manager来到控制页面,根据需要动态设定即可。(我的require host localhost 咋个就不行。。改成ip才可以访问)
ps
现在可以将请求分配到多个服务器了,上面的程序应该是什么样的呢,
- 每个服务器都部署同样的程序,公用一个数据库(或者数据库做主从备份,一个成员用于读请求,一个成员用于写请求,估计是)
- 公用一个文件存储(七牛啥的吧),否则文件不同步。