<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>集成 :: NJET文档</title>
    <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/index.html</link>
    <description></description>
    <generator>Hugo</generator>
    <language>zh</language>
    <lastBuildDate>Mon, 18 Aug 2025 16:36:50 +0800</lastBuildDate>
    <atom:link href="https://docs.njet.org.cn/docs/v4.0.1/reference/integration/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>NJET 向ADC注册</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/njet_adc/index.html</link>
      <pubDate>Thu, 14 Aug 2025 15:20:44 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/njet_adc/index.html</guid>
      <description>1.功能描述 背景及需求 为支持部署更多的OpenNJet 实例并且能够实现水平扩展，需要在和前端4层LB 协调的基础上，满足以下需求：&#xA;1.前端LB设备仅仅负责4层的流量转发&#xA;2.OpenNJet可根据业务规模做水平扩容&#xA;3.OpenNJet通过前端设备提供的API接口向前端设备进行注册&#xA;4.外部client 通过域名访问不同的服务&#xA;实现方案 流程说明&#xA;ADC创建应用池Pool1, 监听IP1:port1(应用负载部分创建虚拟服务器和应用池) ADC设置内部DNS服务器（全局负载部分设置侦听器） ADC设置域名（app1.api.exm.com）和应用池（Pool1）绑定关系（全局负载部分创建虚拟服务器和应用池） 内部DNS要注册到实际的外部DNS OpenNJet启动或者重启后（可以是原生的OpenNJet实例也可能是通过KIC启动的OpenNJet服务实例），调用API接口向应用池Pool1注册member（OpenNJet实际的ip和端口） client访问app1.api.exm.com, 通过外部dns，转发到内部dns，通过内部dns解析得到实际的应用池Pool1的IP1:port1，作为解析结果，返回给client client通过IP1:port1（host：app1.api.exm.com）访问，由ADC设备通过4层协议转发到实际的OpenNJet的ip和端口，并且proxy到实际的业务app1 2.依赖模块 njet_ctrl.conf:&#xA;load_module modules/njt_http_register_module.so; load_module modules/njt_http_lua_module.so; 3.指令说明 Syntax register config={config} server={server} port={port} location={location}； Default register config=conf/register.json server=127.0.0.1 port=8081 location=/adc; Context http 参数说明：&#xA;参数 类型 默认值 说明 config string conf/register.json 注册信息 server string 127.0.0.1 控制面ip port int 8081 控制面端口 location string /adc 控制面注册location 其中register.json格式如下：</description>
    </item>
    <item>
      <title>自动化证书管理</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/acme/index.html</link>
      <pubDate>Thu, 14 Aug 2025 10:12:22 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/acme/index.html</guid>
      <description>1.功能描述 由于ssl证书签发的有效期越来越短，运维人员花在证书管理的成本将成倍增加。结合NJet动态证书管理的能力，在初次配置后，NJet可以通过标准的ACME协议实现证书的自动签发、续签，并自动更新到服务器中，从而实现无需重启，就可以保持证书的有效性，保证业务的持续安全。&#xA;cert-manager实现的主要功能如下：&#xA;为server块中的server_name域名实现证书自动申请、续签。 支持http-01、tls-alpn-01两种挑战(challenge)验证方式。 应用自动签发的证书。通过实现njet https server 块ssl_certificate_key和ssl_certificate指令自动配置(调用njet ssl API实现，即动态证书)来应用证书。 管里面admin API，实现磁盘中证书文件的管理。 支持集群证书同步 由于njet本身的限制，每个server块在启动时需要预先配置证书，所以用户需要自己提前生成证书。后续使能了acme特性后，证书由cert-manager管理。&#xA;cert_manager是一个独立的go 实现的程序，由NJetCoPilot框架驱动。&#xA;证书申请流程 用户配置中使能acme特性后，会触发acme证书申请，可以通过静态或动态两种方式使能。使能后证书申请流程如下：&#xA;证书申请流程(自动化创建证书)&#xA;2.依赖模块 helper cert-manager modules/njt_helper_go_copilot_module.so conf/config.toml; #cert-manager 3.配置说明 ssl_certificate_management acme Syntax: ssl_certificate_management acme; Default: - Context: http main, server 目前只支持acme&#xA;在现有http_ssl 模块新增一个ssl_management 指令&#xA;静态配置文件中配置了该指令，在worker启动或重启时，由pa进程发送新增消息到mqtt&#xA;动态添加vs时，配置了该指令，会发送新增消息到mqtt&#xA;动态删除vs时，如果添加时配置了该指令，则会发送删除的消息到mqtt&#xA;config.toml配置参数 [copilot] progName=&#34;sbin/cert-manager&#34; copilotType=&#34;cert&#34; stdoutFile = &#34;/usr/local/njet/logs/cert_stdout.log&#34; stderrFile = &#34;/usr/local/njet/logs/cert_stderr.log&#34; [acme] email=&#34;liuqi@lq.com&#34; challengeType=&#34;tls&#34; acmeCaDir=&#34;http://127.0.0.1:4001/directory&#34; #部署的acme ca的ip tlsChallengeServerAddress=&#34;:10443&#34; [njet] [admin] [mqtt] mqttServerAddress=&#34;127.0.0.1:1883&#34; [log] v=2 copilot块下的参数不属于cert-manager程序的参数，为njet copilot框架标准参数。其余块为cert-manager程序的参数，主要有5块：acme、mqtt、admin、njet、log</description>
    </item>
    <item>
      <title>snmp 输出</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/snmp/index.html</link>
      <pubDate>Thu, 14 Aug 2025 15:37:35 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/snmp/index.html</guid>
      <description>1.功能描述 “Simple Network Management Protocol”=“简单网络管理协议”，应用层协议，传输层一般采用UDP. SNMP 协议使网络管理员能够使用各种机制（包括电子邮件、警报和陷阱）从远程位置配置和监控他们的网络。&#xA;2.依赖模块 helper snmp modules/njt_helper_snmp_module.so modules/snmp.lua; 3.配置说明 conf/njet.conf 需要加载 snmp copilot&#xA;helper snmp modules/njt_helper_snmp_module.so modules/snmp.lua; conf/snmp.conf&#xA;------------------------------------------------------------------------------- -- SmithSNMP Configuration File ------------------------------------------------------------------------------- protocol = &#39;snmp&#39; port = 2000 metrics_url = &#34;http://localhost:8081/metrics/format/json&#34; trap_server_ip = &#39;127.0.0.1&#39; --trap_server_ip = &#39;192.168.40.157&#39; trap_server_port = 162 mib_module_path = lvm.prefix..&#39;modules/mibs&#39; --mib_module_path = &#39;./modules/mibs&#39; communities = { { community = &#39;public&#39;, views = { [&#34;.&#34;] = &#39;ro&#39; } }, { community = &#39;private&#39;, views = { [&#34;.&#34;] = &#39;rw&#39; } }, } users = { { user = &#39;roNoAuthUser&#39;, views = { [&#34;.&#34;] = &#39;ro&#39; } }, { user = &#39;rwNoAuthUser&#39;, views = { [&#34;.&#34;] = &#39;rw&#39; } }, { user = &#39;roAuthUser&#39;, auth_mode = &#34;md5&#34;, auth_phrase = &#34;roAuthUser&#34;, views = { [&#34;.&#34;] = &#39;ro&#39; } }, { user = &#39;rwAuthUser&#39;, auth_mode = &#34;md5&#34;, auth_phrase = &#34;rwAuthUser&#34;, views = { [&#34;.&#34;] = &#39;rw&#39; } }, { user = &#39;roAuthPrivUser&#39;, auth_mode = &#34;md5&#34;, auth_phrase = &#34;roAuthPrivUser&#34;, encrypt_mode = &#34;aes&#34;, encrypt_phrase = &#34;roAuthPrivUser&#34;, views = { [&#34;.&#34;] = &#39;ro&#39; } }, { user = &#39;rwAuthPrivUser&#39;, auth_mode = &#34;md5&#34;, auth_phrase = &#34;rwAuthPrivUser&#34;, encrypt_mode = &#34;aes&#34;, encrypt_phrase = &#34;rwAuthPrivUser&#34;, views = { [&#34;.&#34;] = &#39;rw&#39; } }, } mib_modules = { [1]= { [&#34;oid&#34;] =&#34;1.3.6.1.6.3.1.1.4&#34; , [&#34;m&#34;] = &#39;snmptrap&#39; }, [2]= { [&#34;oid&#34;] =&#34;1.3.6.1.4.1.99999.2.1&#34; , [&#34;m&#34;] = &#39;njet_sysinfo&#39; }, [3]= { [&#34;oid&#34;] =&#34;1.3.6.1.4.1.99999.2.2&#34; , [&#34;m&#34;] = &#39;njet_conninfo&#39; }, [4]= { [&#34;oid&#34;] =&#34;1.3.6.1.4.1.99999.2.3&#34; , [&#34;m&#34;] = &#39;njet_serverinfo&#39; }, } conf/snmp.conf snmp 一些关键配置</description>
    </item>
    <item>
      <title>文件上传</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/upload/index.html</link>
      <pubDate>Thu, 14 Aug 2025 15:43:56 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/upload/index.html</guid>
      <description>1.功能描述 在控制面，加载njet-http-upload-module，通过api上传接口，能够将本地文件上传到NJET服务器，上传完成后，服务器返回一个文件名称给客户端&#xA;2.依赖模块 load_module modules/njt_http_upload_module.so; 3.配置样例 njet_ctrl.conf&#xA;... #加载文件上传模块，加载后，即可支持/api/v1/upload load_module modules/njt_http_upload_module.so; ... http { server { listen 8081; client_max_body_size 1G; #文件上传大小配置，默认是1M，如果是大文件，则要配置该指令 #配置api入口 location /api { dyn_module_api; #开启api } #配置上传html，通过该html页面可通过浏览器上传一个文件 location / { root /root/bug/njet1.0/html; index upload.html; } .... } upload.html&#xA;&lt;html&gt; &lt;head&gt; &lt;title&gt;Test upload&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h2&gt;Select files to upload&lt;/h2&gt; &lt;form enctype=&#34;multipart/form-data&#34; action=&#34;https://docs.njet.org.cn/docs/v4.0.1/api/v1/upload&#34; method=&#34;post&#34;&gt; &lt;input type=&#34;file&#34; name=&#34;file1&#34;&gt;&lt;br&gt; &lt;input type=&#34;submit&#34; name=&#34;submit&#34; value=&#34;Upload&#34;&gt; &lt;input type=&#34;hidden&#34; name=&#34;test&#34; value=&#34;value&#34;&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; 4.调用样例 curl -F &#34;file=@/home/njet/test_crl/rsa/certsDir/crl.pem&#34; http://192.168.40.158:8081/api/v1/upload 上传成功返回：</description>
    </item>
    <item>
      <title>api 网关功能</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/api_gateway/index.html</link>
      <pubDate>Thu, 14 Aug 2025 15:46:42 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/api_gateway/index.html</guid>
      <description>1.功能描述 支持用户角色维护，OpenAPI导入，授权关系维护，应用部署，后端服务注册，主动健康检查配置，登录及授权校验&#xA;用户维护API 需要提供对用户，组及角色及相互关系维护的API&#xA;一个用户可以对应多个用户组&#xA;角色将赋予用户组&#xA;登录API API设计时，需要考虑不同的后端登录服务类型&#xA;需要提供一个内置的登录服务，内置的登录服务提供如下登录方式：a.)持久化存储中保存的用户名密码做登录校验 b.)通过Email 发送校验码，用户通过校验码登录。&#xA;客户端调用登录API后，将获得一个 token, token 只是一个uuid, 其它的信息（expire_time, role, …) 保存到持久化存储中。&#xA;后续对其它API的调用需要在Header 中设置该token。&#xA;授权API 需要提供 location 下api与角色间授权关系维护的API&#xA;HTTP 不同的method 需要能够设置不同的访问权限&#xA;访问校验 对应用提供的API 访问，API网关需要校验token 有效性及授权关系。&#xA;Token 无效或过期返回 401错误。&#xA;对应角色无访问权限返回403 错误。&#xA;校验成功则由应用进行后续处理。&#xA;应用部署 文件上传使用已有的 /api/v1/upload 接口，做为应用服务器，提供应用部署接口， 需要能够将上传的压缩包解压，部署接口中需要调用动态location , 入口文件可以使用预先约定的方式&#xA;API Gateway 管理员agw_admin 的默认密码，rpm/deb 安装时，将生成默认密码，使用 sbin/agw_passwd 工具进行密码设置 API Gateway 不允许删除默认的用户 2.依赖模块 这个版本将openapi module从静态改变为动态module,需要在njet.conf中增加load_module modules/njt_openapi_util_module.so&#xA;njet.conf:&#xA;load_module modules/njt_http_token_sync_module.so; load_module modules/njt_openapi_util_module.so; njet_ctrl.conf:&#xA;load_module modules/njt_http_lua_module.so; 3.配置样例 njet.conf&#xA;helper broker modules/njt_helper_broker_module.so conf/mqtt.conf; helper ctrl modules/njt_helper_ctrl_module.so conf/njet_ctrl.conf; helper rsync modules/njt_helper_rsync_module.so conf/rsync.conf; load_module modules/njt_http_dyn_map_module.so; load_module modules/njt_agent_dynlog_module.so; load_module modules/njt_http_location_module.so; load_module modules/njt_dyn_ssl_module.so; load_module modules/njt_http_vtsc_module.so; load_module modules/njt_http_dyn_limit_module.so; load_module modules/njt_http_dyn_crl_module.so; load_module modules/njt_http_lua_module.so; load_module modules/njt_http_dyn_lua_module.so; load_module modules/njt_http_token_sync_module.so; ## 依赖该模块 load_module modules/njt_openapi_util_module.so; cluster_name helper; node_name node156; worker_processes 1; #user root; error_log logs/error.log info; pid logs/njet.pid; events { worker_connections 1024; } http { resolver 8.8.8.8; include mime.types; access_log off; vhost_traffic_status_zone; lua_package_path &#34;$prefix/lualib/lib/?.lua;$prefix/modules/?.lua;/usr/local/njet/modules/?.lua;$prefix/apps/?.lua;;&#34;; lua_package_cpath &#34;$prefix/lualib/clib/?.so;;&#34;; token_sync zone=token:4M sync_time=5s clean_time=10s; lua_shared_dict configuration_data 20M; init_by_lua_block { local api_gateway=require(&#34;api_gateway&#34;) api_gateway.init_master() } init_worker_by_lua_block { local api_gateway=require(&#34;api_gateway&#34;) api_gateway.init_worker() } upstream upstream_balancer { server 0.0.0.1; balancer_by_lua_block { balancer.balance() } keepalive 320; keepalive_time 1h; keepalive_timeout 120s; keepalive_requests 10000; } server { listen 8080; server_name frontserver8080; location / { root html; } location /api_gateway { # content_by_lua_file modules/api_gateway/auth.lua; content_by_lua_block { local api_gateway=require(&#34;api_gateway&#34;) api_gateway.auth() } } location /token_get { content_by_lua_block { local token_lib=require(&#34;njt.token&#34;) local args, err = njt.req.get_uri_args() local key = args[&#34;key&#34;] local rc,msg = token_lib.token_get(key) if rc == 0 then njt.say(&#34;old value is: &#34;..msg) else njt.say(&#34;there is no such key in kv&#34;) end } } } server { listen 8001; server_name backserver8001; location / { return 200 &#34;80018001&#34;; } } server { listen 8002; server_name backserver8002; location / { return 200 &#34;80028002&#34;; } } server { listen 8003; server_name backserver8003; location / { return 200 &#34;80038003&#34;; } } } stream { server { listen 238.255.253.251:5557 udp; gossip zone=test:1m heartbeat_timeout=100ms nodeclean_timeout=1s local_ip=192.168.40.156 sync_port=8873 ctrl_port=8081 ; } } njet_ctrl.conf:</description>
    </item>
    <item>
      <title>Privilege Agent 就绪检测</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/privilege/index.html</link>
      <pubDate>Thu, 14 Aug 2025 16:01:44 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/privilege/index.html</guid>
      <description>1.功能描述 NJet 提供的动态API, 对配置修改的报文，将首先发往 privilege agent 进程进行处理。在使用一些程序脚本进行启动（或重启）后的更新时，需要能够获取到privilege agent 是否就绪的状态。 因此需要提供一个检测接口，该接口将返回就绪的状态。&#xA;2.依赖模块 load_module modules/njt_http_privilege_agent_check_module.so; 3.配置样例 njet_ctrl.conf:需要加载njt_http_privilege_agent_check_module.so&#xA;以及指定 kv 模块配置文件 dyn_kv_conf conf/ctrl_kv.conf;&#xA;load_module modules/njt_http_sendmsg_module.so; load_module modules/njt_ctrl_config_api_module.so; load_module modules/njt_helper_health_check_module.so; load_module modules/njt_http_upstream_api_module.so; load_module modules/njt_http_location_api_module.so; load_module modules/njt_doc_module.so; load_module modules/njt_http_vtsd_module.so; load_module modules/njt_http_privilege_agent_check_module.so; error_log logs/error_ctrl.log error; events { worker_connections 1024; } http { dyn_kv_conf conf/ctrl_kv.conf; include mime.types; access_log off; server { listen 8088; location / { return 200 &#34;njet control panel\n&#34;; } location /api { dyn_module_api; } location /doc { doc_api; } location /metrics { vhost_traffic_status_display; vhost_traffic_status_display_format html; } } } ctrl_kv.conf</description>
    </item>
    <item>
      <title>共享内存统计</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/share_memory_statistics/index.html</link>
      <pubDate>Mon, 18 Aug 2025 16:22:42 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/share_memory_statistics/index.html</guid>
      <description>功能描述 可以通过页面查看当前配置共享内存，worker占用的cpu和内存，以及upstream server状态等参数。&#xA;指令说明 Syntax shm_status on|off Default 默认为on Context main 说明：共享内存统计功能的开关，不默认为shm_status on。&#xA;Syntax shm_status_display Default - Context http-&gt;location 说明：共享内统计展示页面，配置在控制面ctrl.conf中。&#xA;配置说明 njet.conf&#xA;helper broker modules/njt_helper_broker_module.so conf/mqtt.conf; helper ctrl modules/njt_helper_ctrl_module.so conf/ctrl.conf; load_module modules/njt_agent_dynlog_module.so; load_module modules/njt_http_dyn_server_module.so; #server验证 load_module modules/njt_http_location_module.so; #location验证 load_module modules/njt_http_dyn_proxy_pass_module.so; #动态proxy_pass模块 load_module modules/njt_http_dyn_upstream_module.so; #动态upstream模块 user root; worker_processes auto; cluster_name helper; node_name node1; error_log logs/error.log info; pid logs/njet.pid; events { worker_connections 1024; } shared_slab_pool_size 100m; #动态共享内存管理指令，配置大小要大于需要配置的upstream共享内存大小 shm_status on; #默认为on，可以不配 http { dyn_kv_conf conf/iot-work.conf; include mime.types; default_type application/octet-stream; access_log logs/access.log; upstream backend1 { zone backend1 1m; server 127.0.0.1:5678; } server { listen 5555; server_name localhost; location / { keepalive_timeout 750s; return 200 &#34;5555 ok&#34;; } location /test { proxy_http_version 1.1; proxy_set_header Connection &#34;&#34;; proxy_pass http://backend1; } location /mirror { internal; set $upstream dyn_backend1; proxy_pass http://$upstream; } } server { listen 5678; location / { return 200 &#34;5678 ok&#34;; } } } njet_ctrl.conf</description>
    </item>
    <item>
      <title>json配置文件支持</title>
      <link>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/json_config_file/index.html</link>
      <pubDate>Mon, 18 Aug 2025 16:36:50 +0800</pubDate>
      <guid>https://docs.njet.org.cn/docs/v4.0.1/reference/integration/json_config_file/index.html</guid>
      <description>功能描述 OpenNJet目前支持json格式的配置文件。&#xA;4.0.0.0版本开始&#xA;配置说明 一条njet.conf指令的标准json格式如下：&#xA;{ &#34;cmd&#34;: &#34;worker_processes&#34;, &#34;args&#34;: [ &#34;auto&#34; ] } 如果指令包含多个参数，例如add_header Host $host; ，则可以写成：&#xA;{ &#34;cmd&#34;: &#34;add_header&#34;, &#34;args&#34;: [ &#34;Host&#34;, &#34;$host&#34; ] } 配置NJET配置文件中upstream代码块格式：&#xA;upstream backend1 { zone backend1 10m; server 127.0.0.1:5900 weight=1; } { &#34;cmd&#34;: &#34;upstream&#34;, &#34;args&#34;: [ &#34;backend1&#34; ], &#34;block&#34;: [ { &#34;cmd&#34;: &#34;zone&#34;, &#34;args&#34;: [ &#34;backend1&#34;, &#34;10m&#34; ] }, { &#34;cmd&#34;: &#34;server&#34;, &#34;args&#34;: [ &#34;127.0.0.1:5900&#34;, &#34;weight=1&#34; ] } ] } 配置NJET配置文件中http/stream代码块格式：&#xA;http { dyn_kv_conf conf/iot-work.conf; include conf/iot-work.conf; access_log off; server { listen 8080; location / { root html; } } } { &#34;cmd&#34;: &#34;http&#34;, &#34;args&#34;: [], &#34;block&#34;: [ { &#34;cmd&#34;: &#34;dyn_kv_conf&#34;, &#34;args&#34;: [ &#34;conf/iot-work.conf&#34; ] }, { &#34;cmd&#34;: &#34;include&#34;, &#34;args&#34;: [ &#34;mime.types&#34; ] }, { &#34;cmd&#34;: &#34;access_log&#34;, &#34;args&#34;: [ &#34;off&#34; ] }, { &#34;cmd&#34;: &#34;server&#34;, &#34;args&#34;: [], &#34;block&#34;: [ { &#34;cmd&#34;: &#34;listen&#34;, &#34;args&#34;: [ &#34;8080&#34; ] }, { &#34;cmd&#34;: &#34;location&#34;, &#34;args&#34;: [ &#34;/&#34; ], &#34;block&#34;: [ { &#34;cmd&#34;: &#34;root&#34;, &#34;args&#34;: [ &#34;html&#34; ] } ] } ] } ] } 配置NJET配置文件中server代码块格式：</description>
    </item>
  </channel>
</rss>