前几天实验了下 nginx 配置反向代理服务器。虽然 nginx 的安装很麻烦,可是用起来却是很简单。不过组里没人用过 nginx,apache 服务器你们却是蛮熟,为了减小 ops team 的工做量,我决定使用 apache。node
我记得本科时安装过 apache 服务器,当初没有遇到困难。而此次安装却总也安装不成功,公司对机器的权限管理的很严格,我没有 root 权限,没有链接外网权限,编译 apache 时有不少依赖拿不到,最后仍是请 ops team 的人帮忙搞定的。nginx
配置 proxy module。apache 服务器的 proxy module 是安装可选的,编译时没有加入反向代理 module,但在编译完成后,依然能够经过修改配置动态加载。配置在 conf/httpd.conf 中,把反向代理相关的 module uncomment 就好。这里须要注意,若是 module 之间存在依赖关系,apache 不会自动 resolve 依赖,反之,它会在 error.log 中告诉咱们缺乏哪一个模块。web
至于反向代理的配置,也在 httpd.conf 中,配置的写法和 nginx 很是相似,对于个人需求,只要在 httpd.conf 中添加apache
Listen 8080 <VirtualHost *:8080> LogLevel error <Location /> ProxyPass http://hostname1:2014/ ProxyPass http://hostname2:2014/ #ProxyPassReverse http://mywebsite.jamescoyle.net/ </Location> </VirtualHost>
须要注意,2014端口后面须要添加一个 / 否则 url 的转换会出错。服务器
关闭 hostname1 上的服务后,apache 会把 request 路由到 hostname2 上,和我需求一致。负载均衡
反向代理搭建完毕后我依然对某些配置不是很理解,好比 ProxyPassReverse,ServerName 等等。测试
后记:上面并无实现负载均衡。url
<VirtualHost *:2014> LogLevel info <Proxy balancer://mycluster> BalancerMember http://host1:2015 BalancerMember http://host2:2015 </Proxy> ProxyPass / balancer://mycluster/ </VirtualHost>
我觉得配上两个 ProxyPass 就实现了负载均衡,实际并不是如此, ProxyPass 配置多条的话,后面的会覆盖前面的,可是好处是当一个 node down 掉后,apache 会自动路由到可用的。上面的配置才是真正的负载均衡,策略是默认的 byRequests. 须要注意的是, BalanceMember 后面没有 /,ProxyPass 后面有 /spa
配置完测试了几回,发现两个 node 都有请求的到来。.net
关于配置:
apache 提供了不少详细的配置,用于自定义反向代理/负载均衡的行为。好比,lbmethod 能够选取 byRequests, byTraffic 等等,还能够设置 lbfactor, timeout, retry