json配置文件支持

功能描述

OpenNJet目前支持json格式的配置文件。

配置说明

一条njet.conf指令的标准json格式如下:

       {
            "cmd": "worker_processes",
            "args": [
                "auto"
            ]
        }

如果指令包含多个参数,例如add_header Host $host; ,则可以写成:

            {
                  "cmd": "add_header",
                  "args": [
                    "Host",
                    "$host"
                  ]
              }

配置NJET配置文件中upstream代码块格式:

upstream backend1 {

          zone backend1 10m;        
          server 127.0.0.1:5900 weight=1;

    }
{
          "cmd": "upstream",
          "args": [
            "backend1"
          ],
          "block": [
            {
              "cmd": "zone",
              "args": [
                "backend1",
                "10m"
              ]
            },
            {
              "cmd": "server",
              "args": [
                "127.0.0.1:5900",
                "weight=1"
              ]
            }
          ]
        }

配置NJET配置文件中http/stream代码块格式:

http {

    dyn_kv_conf conf/iot-work.conf;
  
    include conf/iot-work.conf;
  
    access_log off;
  
    server {
  
           listen 8080;
  
           location / {
         
                root html;     
           } 
       }
}
{
      "cmd": "http",
      "args": [],
      "block": [
        {
          "cmd": "dyn_kv_conf",
          "args": [
            "conf/iot-work.conf"
          ]
        },
        {
          "cmd": "include",
          "args": [
            "mime.types"
          ]
        },
        {
          "cmd": "access_log",
          "args": [
            "off"
          ]
        },
        {
          "cmd": "server",
          "args": [],
          "block": [
            {
              "cmd": "listen",
              "args": [
                "8080"
              ]
            },
            {
              "cmd": "location",
              "args": [
                "/"
              ],
              "block": [
                {
                  "cmd": "root",
                  "args": [
                    "html"
                  ]
                }
              ]
            }
          ]
        }
      ]
    }

配置NJET配置文件中server代码块格式:

server {

      listen 443 ssl;
    
       ssl_certificate certs/rsa.server.cer.pem;

       ssl_certificate_key certs/rsa.server.key.pem;

       location / {
         
                root html;     
           }      
}
       {
          "cmd": "server",
          "args": [],
          "block": [
            {
              "cmd": "listen",
              "args": [
                "443",
                "ssl"
              ]
            },
            {
              "cmd": "ssl_certificate",
              "args": [
                "certs/rsa.server.cer.pem"
              ]
            },
            {
              "cmd": "ssl_certificate_key",
              "args": [
                "certs/rsa.server.key.pem"
              ]
            }
            {
              "cmd": "location",
              "args": [
                "/"
              ],
              "block": [
                {
                  "cmd": "root",
                  "args": [
                    "html"
                  ]
                }
              ]
            }
          ]
         }

配置NJET配置文件中lua代码块格式:

 location / {
 
       content_by_lua_block {
     
             njt.sleep(5)
             njt.say ("test ok")
    
       }
 }
      {
              "cmd": "location",
              "args": [
                "/"
              ],
              "block": [
                {
                  "cmd": "content_by_lua_block",
                  "args": [],
                  "block": [
                    {
                      "code": "\n\n  njt.sleep(5)\n  njt.say(\"test ok\")\n  "
                    }
                  ]
                }
              ]
            }

NJET标准配置文件示例

{
  "parsed": [
    {
      "cmd": "worker_processes",
      "args": [
        "2"
      ]
    },
    {
      "cmd": "cluster_name",
      "args": [
        "njet"
      ]
    },
    {
      "cmd": "node_name",
      "args": [
        "node1"
      ]
    },
    {
      "cmd": "error_log",
      "args": [
        "logs/error.log",
        "info"
      ]
    },
    {
      "cmd": "helper",
      "args": [
        "ctrl",
        "modules/njt_helper_ctrl_module.so",
        "conf/njet_ctrl.conf"
      ]
    },
    {
      "cmd": "helper",
      "args": [
        "broker",
        "modules/njt_helper_broker_module.so"
      ]
    },
    {
      "cmd": "helper",
      "args": [
        "access_data",
        "modules/njt_helper_access_data_module.so",
        "conf/goaccess.conf"
      ]
    },
    {
      "cmd": "load_module",
      "args": [
        "modules/njt_http_split_clients_2_module.so"
      ]
    },
    {
      "cmd": "load_module",
      "args": [
        "modules/njt_agent_dynlog_module.so"
      ]
    },
    {
      "cmd": "load_module",
      "args": [
        "modules/njt_http_dyn_bwlist_module.so"
      ]
    },
    {
      "cmd": "load_module",
      "args": [
        "modules/njt_dyn_ssl_module.so"
      ]
    },
    {
      "cmd": "load_module",
      "args": [
        "modules/njt_http_vtsc_module.so"
      ]
    },
    {
      "cmd": "load_module",
      "args": [
        "modules/njt_http_location_module.so"
      ]
    },
    {
      "cmd": "load_module",
      "args": [
        "modules/njt_http_access_log_zone_module.so"
      ]
    },
    {
      "cmd": "events",
      "args": [],
      "block": [
        {
          "cmd": "worker_connections",
          "args": [
            "1024"
          ]
        }
      ]
    },
    {
      "cmd": "http",
      "args": [],
      "block": [
        {
          "cmd": "dyn_kv_conf",
          "args": [
            "conf/iot-work.conf"
          ]
        },
        {
          "cmd": "include",
          "args": [
            "mime.types"
          ]
        },
        {
          "cmd": "access_log",
          "args": [
            "off"
          ]
        },
        {
          "cmd": "vhost_traffic_status_zone",
          "args": []
        },
        {
          "cmd": "access_log_write_zone",
          "args": [
            "on"
          ]
        },
        {
          "cmd": "access_log_zone",
          "args": [
            "log_zone",
            "100m"
          ]
        },
        {
          "cmd": "access_log_zone_valid",
          "args": [
            "3"
          ]
        },
        {
          "cmd": "server",
          "args": [],
          "block": [
            {
              "cmd": "listen",
              "args": [
                "8080"
              ]
            },
            {
              "cmd": "location",
              "args": [
                "/"
              ],
              "block": [
                {
                  "cmd": "root",
                  "args": [
                    "html"
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "file": "/usr/local/njet/conf/njet.conf"

JSON格式配置文件使用和检查:

配置好json配置文件后,通过-c命令指定该json即可启动。

示例:

/usr/local/njet/sbin/njet -p /usr/local/njet/ -c conf/njet_conf.json -e logs/error.log

验证是否配置成功可以使用-t命令

示例:

/usr/local/njet/sbin/njet -p /usr/local/njet/ -c conf/njet_conf.json -e logs/error.log -t

返回值:

njet: the configuration file /usr/local/njet/conf/njet_conf.json syntax is ok
njet: configuration file /usr/local/njet/conf/njet_conf.json test is successful

如果语法不正确,则会报错:

njet: [emerg]  JSON file parse error (line 9, colume 5): ']' expected near '{'

njet: [emerg]  unexpected "{" in /usr/local/njet/conf/njet_conf.json:1