如何使用confd+ACM管理Nginx配置

Nginx 做爲優秀的開源軟件,憑藉其高性能高併發等特色,經常做爲web和反向代理服務部署在生產環境中。可是當 Nginx 的規模較大時, Nginx 的運維成本也是不斷上升。本文介紹如何經過confd+ACM來管理 Nginx 配置,經過集中式的配置管理方式解決 Nginx 的大規模運維問題,運維和開發人員不用登錄到 Nginx 機器上,只須要配置好confd,而後在ACM上操做就能夠動態修改 Nginx 的配置參數。html

準備工做

在操做本文的示例以前須要配置好開通ACM和對confd的使用有基本概念,ACM的開通及其基本使用能夠參考:這裏
confd的基本使用能夠參考:這裏node

Nginx 在平常開發中使用得比較多的功能是負載均衡、限流、緩存等, Nginx 的使用和安裝能夠在網上查閱相關資料。本文結合負載均衡和限流功能講解如何使用confd+ACM實現 Nginx 的大規模運維操做。web

建立confd配置文件

建立confd所需的toml格式配置文件json

vim /etc/confd/conf.d/myapp.toml

check_cmd用於檢驗 Nginx 配置的正確性,當src配置錯誤則不會覆蓋 Nginx 配置
reload_cmd用於reload Nginx 配置vim

[template]
src = " Nginx .conf.tmpl"
dest = "/usr/local/ Nginx /conf/ Nginx .conf"
keys = [
"/myapp/ Nginx /conf",
]

check_cmd = "/usr/local/ Nginx /sbin/ Nginx  -t -c {{.src}}"
reload_cmd = "/usr/local/ Nginx /sbin/ Nginx  -s reload"

建立模版文件

vim /etc/confd/templates/ Nginx .conf.tmpl

getv從ACM中獲取對應dataId的配置,/myapp/ Nginx /conf對應的dataId爲myapp. Nginx .conf,配置格式爲json格式,模版文件包含了 Nginx 的upstream、限流、黑白名單配置內容,經過json指令解析配置文件。upstream後端ip經過從ACM的配置的backends數組中獲取,一樣地,白名單和黑名單ip分別存儲在whiteList和blackList的數組中,限流的速率和併發數經過rateLimit和connectionLimit設置後端

...
{{$data := json (getv "/myapp/ Nginx /conf")}}
geo $whiteiplist {
    default 1;
    {{range $data.whiteList}}
    {{.}} 0;
    {{end}}
}

map $whiteiplist $limit {
    1 $binary_remote_addr;
    0 "";
}
limit_req_zone $limit zone=rateLimit:10m rate={{$data.rateLimit}}r/s;
limit_conn_zone $limit zone=connectionLimit:10m;

{{range $data.blackList}}
deny {{.}};
{{end}}
upstream myapp {
    server 11.160.65.95:8080;
}
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;
    location / {
        root   html;
        index  index.html index.htm;
        proxy_pass http://myapp;

        limit_conn connectionLimit {{$data.connectionLimit}};
        limit_req zone=rateLimit burst={{$data.burst}} nodelay;
    }
...
}
...

在ACM上建立所需的配置文件

建立dataId爲myapp. Nginx .conf的配置文件,group使用默認的DEFAULT_GROUP便可,配置內容設置好上游節點、黑白名單以及限流閾值數組

{
"backends":["10.0.1.100:80","10.0.1.101:80"],
"whiteList":["10.0.1.102","10.0.1.103"],
"blackList":["10.0.1.104","10.0.1.104"],
"rateLimit":"10",
"connectionLimit":"10",
"burst":"10"
}

啓動confd

啓動confd,設置好backend、endpoint、命名空間namespace和阿里雲帳號accessKey/secretKey緩存

confd -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}

生成配置文件

confd將ACM中的參數經過模板文件渲染生成新的 Nginx 配置文件,查看生成的/usr/local/ Nginx / Nginx .conf配置文件是否符合預期,並檢查 Nginx 是否成功reload配置。安全

...
geo $whiteiplist {
    default 1;

    10.0.1.102 0;

    10.0.1.103 0;

}

map $whiteiplist $limit {
    1 $binary_remote_addr;
    0 "";
}

limit_req_zone $limit zone=rateLimit:10m rate=10r/s;
limit_conn_zone $limit zone=connectionLimit:10m;

deny 30.5.125.74;

deny 10.0.1.105;

upstream myapp {
    server 11.160.65.95:8080;
}
server {
    listen       80;
    server_name  localhost;
    location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://myapp;

            limit_conn connectionLimit 10;
            limit_req zone=rateLimit burst=10 nodelay;
        }
...
}
...

動態修改 Nginx 配置

運行時當須要調節 Nginx 的名單或者限流閾值的時候,能夠在ACM上修改配置的內容。固然在生產環境可使用ACM的灰度發佈功能(Beta發佈)驗證沒問題再全量發佈下去。併發

本文演示瞭如何使用confd+ACM管理 Nginx 配置,下降 Nginx 的運維成本。
confd+ACM的使用還能夠參考:
如何在阿里雲上安全的存放您的配置 - 續
使用etcd+confd管理 Nginx 配置

本文做者:風卿,Nacos 社區 Committer



本文做者:中間件小哥

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索