天天看點

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

Nginx 作為優秀的開源軟體,憑借其高性能高并發等特點,常常作為web和反向代理服務部署在生産環境中。但是當 Nginx 的規模較大時, Nginx 的運維成本也是不斷上升。本文介紹如何通過confd+ACM來管理 Nginx 配置,通過集中式的配置管理方式解決 Nginx 的大規模運維問題,運維和開發人員不用登陸到 Nginx 機器上,隻需要配置好confd,然後在ACM上操作就可以動态修改 Nginx 的配置參數。

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

準備工作

在操作本文的示例之前需要配置好開通ACM和對confd的使用有基本概念,ACM的開通及其基本使用可以參考:

這裡

confd的基本使用可以參考:

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

建立confd配置檔案

建立confd所需的toml格式配置檔案

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

check_cmd用于檢驗 nginx 配置的正确性,當src配置錯誤則不會覆寫 nginx 配置

reload_cmd用于reload nginx 配置

[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"           

建立模版檔案

...
{{$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 {
{{range $data.backends}}
    server {{.}};
{{end}}
}
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+ACM管理Nginx配置

啟動confd

啟動confd,設定好backend、endpoint、命名空間namespace和阿裡雲賬号accessKey/secretKey

confd -backend nacos -endpoint {endpoint}:8080 -namespace {namespace} -accessKey {accessKey} -secretKey {secretKey}           
如何使用confd+ACM管理Nginx配置

生成配置檔案

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 10.0.1.100:80;
    server 10.0.1.101:80;
}
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配置

本文示範了如何使用confd+ACM管理 Nginx 配置,降低 Nginx 的運維成本。

confd+ACM的使用還可以參考:

如何在阿裡雲上安全的存放您的配置 - 續

本文作者:風卿,Nacos 社群 Committer

繼續閱讀