Proxy:简单小巧又强大好用的代理系统

以前的文章介绍了许多咱们在用的DevOps相关的工具系统,例如:方便建立多套运行环境的Alodi对运维友好的配置中心Kerrigan强大的自定义任务引擎Probius以及专一于数据库自动化的overmind等等,这篇文章介绍一个很是简单但却十分好用的系统,Proxy代理管理系统nginx

代理系统相似于Kubernetes里Ingress的角色,位于下层服务与上层用户之间,做用与公有云的负载均衡LB一致,基于Nginx构建,主要使用Upstream模块web

系统由来

为何会须要这么个系统?来说讲咱们的场景和逻辑数据库

每一个项目都须要开发测试环境,这些环境都部署在公司内网,而不少项目由于各类缘由都须要外网能访问的到,例如小程序/公众号/支付相关的项目都须要接收微信支付宝的回调,这种需求一般有两种方式来实现小程序

  1. 直接给开发测试环境所在的主机配置个公网IP,域名指向这个公网IP
  2. 搭建一个代理服务器,全部的请求都先到这个代理服务器,而后根据域名转发到不一样的项目环境

对于方案1,优势在于实现简单,但缺点更为明显,首先公网IP资源有限,其次管理也不方便,只适合一些项目很少的小团队。方案2则更为经常使用,只须要一个公网IP,将全部须要外网访问的项目入口集中在一块儿,管理起来也更为方便服务器

咱们刚开始就是找了台服务器部署Nginx作代理,若是须要代理服务就去修改Nginx配置文件,但随着项目愈来愈多,修改Nginx配置文件也成了麻烦事,效率低下、修改冲突、不可追踪成了急需问题,因而便开发了这个Proxy代理系统,到目前为止稳定运行3年,管理了400+代理微信

系统介绍

系统的核心功能就是要经过web去提交配置而后自动生成Nginx配置文件,除了用户管理这种通用模块外主要分三大块的内容:实例管理,证书管理和黑白名单,每个实例都指的是一个代理服务,对应Nginx中的一个Server,实例关联证书和黑白名单,这里先介绍一下证书和黑白名单模块websocket

证书模块能够用来管理全部用到的HTTPS证书,每个证书都会在服务器上建立对应的crt和key文件,方便在实例中引用,对于证书的更新也只须要更新这一个地方就能够了,更新完成以后会自动reload以保证生效负载均衡

黑白名单模块对应与Nginx的ACL设置,经过allow和deny来实现黑名单禁止访问,白名单容许访问,原理与证书管理差很少,都是根据输入内容生成对应的文件保存到服务器上,生成配置文件用到了jinja2,个人博客也是一样的方法生成的,能够看这篇文章来了解:利用Django徒手写个静态页面生成工具,黑白名单最终在实例里以include的方式引入运维

不管是证书仍是黑白名单最终都是为实例也就是Nginx的Server服务的,对于做为代理的Server配置很简单,下方是一个模板socket

upstream 11 {
    server 192.168.106.110:80;
}

server {
    listen       443;
    server_name  blog.ops-coffee.cn ;

    ssl                  on;
    ssl_certificate      ssl/1.crt;
    ssl_certificate_key  ssl/1.key;

    include acl/1.conf;
    include acl/3.conf;
    deny all;

    auth_basic "please input user&passwd";
    auth_basic_user_file key/11.key;

    location / {
        proxy_pass http://11;
    }

    access_log  /home/logs/nginx/11.log  main;
}

从这个模板里能够看出,咱们大概须要以下一些信息,域名server_name、开放端口listen、是否开启ssl以及SSL的证书和密钥、是否有acl白名单以及白名单的地址、是否须要auth_base认证以及帐号密码这几类信息,因而对于新建实例咱们就须要以下这些信息

根据平时的使用经验,可能有多个域名使用同一个代理,因此提交的数据还有个别名。同时高级配置里还支持用户输入自定义的Nginx配置,这些自定义的Nginx配置会自动填充到Server中,这样就能方便的实现更加复杂的需求,例如修改上传文件大小限制、开启websocket支持、甚至是根据URI的代理等

对于实例更多的信息能够在实例详情页面查看

注意右上角有个“日志”按钮,系统还集成了查看日志的功能,经过websocket去监听日志文件,实时的输出到页面上,方便排错,Websocket实时获取日志文件以前写过一篇文章有介绍,能够点这个连接查看,不过我在Proxy里使用的有所简化,没有用到Celery,更轻便

额外收获

Proxy本来用来管理须要对外开放访问的项目,但为了统一的管理,逐渐的把全部的代理都迁移进了Proxy,这样作不只管理起来更为方便,并且无形中还提供了一个查询团队全部域名的入口,团队如今维护了超过100+项目,并非每一个人都能准确的记住每一个项目各个环境的域名,而经过Proxy就能够方便的查询

在Proxy应用后,对于域名的管理也简单了很多,本来DNS上有几百条xxx.ops-coffee.cn的域名分别指向了不一样的IP,如今也简单多了,只须要建立一条*.ops-coffee.cn的泛域名解析指向到Proxy的地址便可

Proxy虽然是个很是简单的小工具,但带来的便利却并不简单~

相关文章
相关标签/搜索