常见问题
1.访问不存在的接口,会报500的错误。
2.njet_ctrl.conf中自定义了接口location,curl命令可以正常使用,但是doc gui无法使用。
njt_ctrl标准配置文件:需要包含如下location:
/api 提供api维护
/metrics 指标输出接口
/doc/swagger openapi接口
3.安装后如何启动
使用 rpm 或 deb 二进制安装后,会在 /usr/lib/syste md/system/ 目录下添加 service文件。
使用 sudo systemctl start njet 启动服务。
使用 sudo systemctl stop njet 停止服务。
4.安装后如何解决和其他程序的端口冲突问题?
OpenNJet 安装后, /usr/local/njet/conf/ 目录下的初始配置文件, 监听 8080 和 8081 端口。
如果主机上有其它应用以及使用了对应端口, 可以修改配置文件路径下的njet.conf 及njet_ctrl.conf 文件。
5.在容器中如果出现使用ip6tables指令时出现报错
sudo ip6tables -t nat -S
ip6tables v1.6.1: can't initialize ip6tables table `nat': Table does not exist (do you need to insmod?)请在宿主机执行指令
sudo modprobe ip6table_filter6.测试OpenNJet功能时,报 “msg”: “not register api module”
A:报not register api module 是因为配置中没有加载动态库,请参考OpenNJet 使用手册v3.3.1中的具体功能模块的配置说明加载动态库,重新启动NJet
7.使用upstream api查询不到upstream,返回404
A:使用upstream api时,必须先创建好一组upstream,并配置zone,才可以对upstream中成员进行增删改查等操作。
8.启动NJet 时,报 njt_helper_ctrl_module 版本不匹配错误 (0 != 1023001)
详细报错信息:启动NJet 时,报module “/usr/local/njet/modules/njt_helper_ctrl_module.so(njt_helper_ctrl_module.so)”; version 0 instead of 1023001 in /usr/local/njet/conf/njet_ctrl.conf:15** .
A:是因为copilot配置在njet_ctrl.conf 里的原因,应该配置在njet.conf 里, 同样copilot包括copilot:ctrl,copilot:broker,copilot:ha,所以这3个都要配置在njet.conf 配置文件里, 关于copilot的详细说明请参考OpenNJet 使用手册v2.1.0 的3.2 章节
9.新增域名、location有对应的键值用于定位吗?
9.1动态新增域名,需要使用动态VS 的api 接口(具体参考手册), 使用ip,port 来定位。
主要参数需要:操作类型type, ip+port,以及 新增加的server_name,server_body 字段非必须。
例如:
{ “type”: “add”, “addr_port”: “0.0.0.0:90”, “server_name”: “server-901”, “server_body”: “return 200 server-901;” }
9.2新增动态location,需要使用动态location 的api 接口(具体参考手册), 使用ip,port, VS名 来定位。
主要参数需要:操作类型type, ip+port,以及 新增加的server_name,locations 字段。
例如:
{ “type”: “add”, “addr_port”: “0.0.0.0:90”, “server_name”: “server-90”, “locations”: [{ “location_rule”: “=”, “location_name”: “/ttt1 “, “location_body”: “return 200 ttt1” }] }
注意:
- 如果需要同时新增动态VS, 和 动态location,是需要分别两次调用不同的api 来完成。
- 每次只能添加,删除单个VS 或 location。多个的话需要多次调用。
10.https://njet.org.cn/cases/http3_ntls_support/请问这个有具体的配置文件吗?
A:
当时配置成功的server如下,此外还需要客户端支持quic协议及国密套件 server { listen 8443 quic reuseport; listen 8443 ssl; ssl_ntls off; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # ssl_certificate /usr/local/njet/conf/sm2_sign.cer /usr/local/njet/conf/sm2_enc.cer; # ssl_certificate_key /usr/local/njet/conf/sm2_sign.key /usr/local/njet/conf/sm2_enc.key; ssl_certificate /usr/local/njet/conf/sm2_sign.cer ; ssl_certificate_key /usr/local/njet/conf/sm2_sign.key; server_name njet.org.cn; location / { add_header Alt-Svc ‘h3=”:$server_port”; ma=86400’; root html; } … }
目前只支持单证书
需要用tongsuo8.3编译,
./build_cc.sh –with_tongsuo_8_3 conf
./build_cc.sh make
最好不要用之前编译过的,重新下载或解压
11.支持http3国密对xquic的代码修改在哪里能看到?
https://192.168.30.120/njet_dev/http3/-/blame/http3/xquic.diff
12.FTP代理场景异常:直连正常但代理返回425 (RETR response)
ftp代理:客户端直连ftp 服务是可以正常上传下载文件的,通过njet 代理连接ftp 服务返回curl:(19) RETR response:425
A:大概原因是在连接中变换了IP地址.解决方法:
# vi /etc/vsftpd/vsftpd.conf
添加:pasv_promiscuous=YES
保存退出
# service vsftpd restart13.Linux系统core dump配置方法
- 设置core 生成独立文件
vi /etc/systemd/coredump.conf [Coredump] Storage=external #这行配置打开作用:把 core 写成独立文件放到 /var/lib/systemd/coredump/,同时在 journal 里只留一条小记录,含文件路径。
2.修改core_pattern
- 临时生效(立刻起效,重启丢失)
sudo sh -c 'echo "|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h" > /proc/sys/'- 永久生效(重启仍保留)
上述更改是临时的。要使其永久生效,你必须编辑 /etc/sysctl.d/ 目录中的一个文件。 创建一个新文件或编辑一个已存在的文件,例如 /etc/sysctl.d/50-coredump.conf。
echo 'kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h' | sudo tee /etc/sysctl.d/50-coredump.conf
sudo sysctl --system # 立即加载,无需重启14. 如何在无 root 和 sudo 权限的服务器上部署 NJet 应用服务器?
问题描述: 由于安全规范或环境限制,目标部署服务器没有 root用户权限,也无法使用sudo命令。我们需要在这样的环境中安装并启动 NJet 应用服务器,并希望将其安装到指定的自定义目录。
解决方法:
步骤一:在一台有权限的机器,利用rpm或deb文件安装。这里用rpm 包安装的。安装后会在/usr/local/njet 目录下

步骤三:把/usr/local/njet直接copy 到没有权限机器的特定目录

步骤四:修改njet.conf ,添加配置指令privileged_agent off;
步骤五:启动njet,使用njet -p 特定目录 -c 配置文件 命令启动

15.lua路径问题:为什么没有访问默认路径下的so
解决方法: 关于lua库的问题,根据如下截图上的报错,我发现.lua文件,njet会自动去找安装目录下的位置查找(绿色),但是.so的文件并没有去找,只去了配置文件里指定的位置和默认的lua文件夹。想了解一下这个是需要什么特殊设置还是说就是这样设定的。之前的工程出于部署方便,使用的openresty自带模块的都是通过默认路径查找的,配置文件中没有明显的写出来。
解决方法: 这个是njet 编译进去的 luajit 的一些 default path。是 src/ext 底下 http lua 模块的一些默认路径。如果没有在可执行文件中的默认路径,就通过对应的环境变量进行配置,如下图展示:







