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雖然是個很是簡單的小工具,但帶來的便利卻並不簡單~

相關文章
相關標籤/搜索