下一代Nginx? OpenNjet 的入门实践

news/2024/5/19 22:21:05

何为 OpenNjet ?

OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序,作为底层引擎,OpenNJet 实现了NGINX 云原生功能增强安全加固和代码重构,利用动态加载机制可以实现不同的产品形态,如Web服务器、流媒体服务器、负载均衡、代理(Proxy)、应用中间件、API网关、消息队列等产品形态等等。

更多信息参见—— https://njet.org.cn/

类似产品

OpenNjet感觉很强大的样子,而目前市面上的也有相关的类似解决方案,可以做做对比

  • Nginx

    • 目前市面上最有名的 Web服务器 解决方案

    • 是一个高性能的Web服务器,专注于对静态内容的快速和高效服务。它采用异步网络IO模型,具有很好的抗高并发能力。Nginx通常用作反向代理服务器,也可以实现负载均衡和动静分离。它的特点是轻量级,占用更少的内存和资源,并且支持热部署,即不停机更新配置文件和升级版本。

  • Apache

    • 是一个通用的Web服务器,支持静态和动态内容,可以通过扩展脚本和模块来支持更多的功能。它性能稳定,功能强大,高度模块化,并且可以作为代理服务器或负载均衡器使用。Apache支持多种操作系统和Web服务器平台,通用性较高,但可能需要更多的配置和管理。

  • Tomcat

    • 是一个专门用于Java应用程序的Web服务器和应用程序服务器,可以运行Java Servlet和JavaServer Pages(JSP)。它是轻量级的应用服务器,支持动态处理,并且可以独立于Apache运行。Tomcat使用基于线程池的模型来处理请求,能够支持大量并发请求,但在处理静态内容方面性能较低。

OpenNjet 的优势

  • 性能无损动态配置 (这个功能是着实不错👍)

  • 灵活的CoPilot框架

  • 支持HTTP/3

  • 支持国密

  • 企业级应用

  • 高效安全

OpenNjet 的使用实践

实践过程中作者使用服务器配置为 CPU - 2核 内存 - 2GB CentOS 7.6 64bit(对于CentOs镜像目前只支持 centos 7 和 x86_64架构)当然 OpenNjet 针对不同系统镜像提供了专用的解决方案,官方提供centos,ubuntu,cloudOS等多个版本的2进制安装包,及软件源。具体参见官网文档: 快速开始--安装

先说一下大概流程

  • 服务器上安装 OpenNjet

  • 部署 WebServer 服务,部署网站

  • 尝试动态修改配置

安装

现在 njet 支持yum源安装了,目前只支持 centos 7 和 x86_64架构。具体安装方式如下:

采用 发行版 的方式安装,官网目前还提供 二进制文件安装& 源码安装

1.生成njet.repo

# 官方给的命令,先执行,若报错往下看
echo "[opennjet]name=OpenNJetbaseurl=https://njet.org.cn/download/linux/centos/$releasever/$basearch/enabled=1gpgcheck=1gpgkey=https://njet.org.cn/download/linux/centos/RPM-GPG-KEY-OpenNJet" > /etc/yum.repos.d/njet.repo

上面是官方给的命令,(在执行第二步-- yum clean all)可能会提示报错如下:
Loaded plugins: fastestmirror, langpacksFile contains parsing errors: file:///etc/yum.repos.d/njet.repo[line  3]:     name=OpenNJet[line  4]:  baseurl=https://njet.org.cn/download/linux/centos///[line  5]:     enabled=1[line  6]:     gpgcheck=1[line  7]:  gpgkey=https://njet.org.cn/download/linux/centos/RPM-GPG-KEY-OpenNJet

是因为 $releasever 和 $basearch 不能被识别,原因如下

它们通常由CentOS或RHEL(Red Hat Enterprise Linux)系统的发行版信息脚本来设置。这些变量代表特定于发行版的信息,用于构建YUM仓库的URL。$releasever 通常指的是发行版的版本号,例如 "7" 对于 CentOS 7。
$basearch 指的是底层架构的类型,例如 "x86_64" 对于64位系统。

所以命令更新为如下

echo -e "[opennjet]\nname=OpenNJet\nbaseurl=https://njet.org.cn/download/linux/centos/7/x86_64/\nenabled=1\ngpgcheck=1\ngpgkey=https://njet.org.cn/download/linux/centos/RPM-GPG-KEY-OpenNJet" | sudo tee /etc/yum.repos.d/njet.repo# echo -e 来允许解释反斜杠 \ 作为转义字符,tee 命令用于将输出写入文件。

2.更新yum 缓存

记得 两个命令 要依次执行
yum clean all#成功输出如下
#Loaded plugins: fastestmirror, langpacks
#Cleaning repos: docker-ce-stable epel extras opennjet os updates
#Cleaning up list of fastest mirrorsyum makecache #类似于 apt update#成功输出如下
# Metadata Cache Created 

3.安装 njet 或 njet-otel

yum install njet
yum install njet-otel# 会有 is this ok 的确认,输入 y 即可#成功输出如下#Installed:
#  njet.x86_64 0:2.1.0-1.el7                                                                                                                                                       
#Dependency Installed:
#  pcre2.x86_64 0:10.23-2.el7                                                                                                                                                      
#Complete!
也可以使用 yum list installed 来查看,所有的安装库,检查是否安装起了 njet

启动OpenNjet

  • 通过systemctl起停

sudo systemctl start njet#无输出
  • 检查是否安装成功,执行以下命令

njet -h
# 输入如下即为成功
# njet version: njet/2.1.0 (NJT_49bbb7323c42624fcc702182352114b2427d284d)
# ...等
若输出 -bash: njet: command not found 则是环境变量的问题,不做过多赘述
# 临时解决方案# 1.执行 命令 找到 njet 的bin执行文件的位置
find / -name njet
# 假设输出如下
# /usr/local/njet
# /usr/local/njet/sbin/njet# 2.直接使用路径调用njet命令
/usr/local/njet/sbin/njet -h
# 输入如下即为成功
# njet version: njet/2.1.0 (NJT_49bbb7323c42624fcc702182352114b2427d284d)
# ...等

测试启动Web Server服务

刚好最近使用 Nuxt.js 模仿了以下 某站 的移动端首页,使用 OpenNjet 来部署

这里要注意 njet 安装在服务器后,会有一个 njet 文件夹产生,里面有如下文件结构
  ├── build           编译rpm/deb脚本├── auto            自动检测系统环境以及编译相关的脚本│   ├── cc          关于编译器相关的编译选项的检测脚本│   ├── lib         njet编译所需要的一些库的检测脚本│   ├── os          与平台相关的一些系统参数与系统调用相关的检测│   └── types       与数据类型相关的一些辅助脚本├── conf            存放默认配置文件,在make install后,会拷贝到安装目录中去├── contrib         存放一些实用工具,如geo配置生成工具(geo2njet.pl)├── html            存放默认的网页文件,在make install后,会拷贝到安装目录中去├── repos           存放yum数据源├── doc             njet的api文档│   ├── swagger     openapi 接口网页文档│   ├── gui         前端展示页面文档│   └── manual      njet文档手册├── luajit          luajit├── lualib          lualib├── modules         njet动态模块以及util模块└── src             存放njet的源代码├── core        njet的核心源代码,包括常用数据结构的定义,以及njet初始化运行的核心代码如main函数├── event       对系统事件处理机制的封装,以及定时器的实现相关代码│   └── modules 不同事件处理方式的模块化,如select、poll、epoll、kqueue等├── http        njet作为http服务器相关的代码│   └── modules 包含http的各种功能模块├── ext/lua     lua模块├── mail        njet作为邮件代理服务器相关的代码├── stream      tcp/  udp   四层网络代理服务器相关的代码├── misc        一些辅助代码,测试c++头的兼容性,以及对google_perftools的支持└── os          主要是对各种不同体系统结构所提供的系统函数的封装,对外提供统一的系统调用接口

找到 njet 项目文件路径

find / -name njet# 假设输出如下
# /usr/local/njet #就是这个文件夹
# /usr/local/njet/sbin/njet #这是环境变量所用

测试启动

njet -p /usr/local/njet -c conf/njet.conf# njet -p njet项目目录 -c njet.conf配置在njet项目路径 启动项目# njet -s stop 停止服务的命令
  • 访问 服务器公网IP:8080 看到如下页面即成功

使用Web Server服务 部署网站服务

先将测试启动的 njet 服务停止,执行以下命令
#停止服务的命令
njet -s stop 

准备好 njet.conf

  • 类似于 Nginx 的 default.conf,njet 也有自己的配置文件 njet.conf

  • 将下面的内容放进 上诉提到的 njet 项目文件下的 conf/njet.conf (注意不要把其他的默认内容覆盖了,仅仅配置 http.server 对应的部分就好)

# 起一个 http 服务
http {# 设置 server 配置server {# 监听8080 端口listen 8080;# 嘻嘻 我的网站就叫 SiliSiliserver_name shitMountainSiliSili.com; # web网页文件的 根目录 以及 启动文件location / {root html;# root /var/www/html;# index index.html;} }
}

准备好Web网页应用项目文件

将所有的项目文件都上传至服务器,位置如下usr/local/njet/html , 即njet项目所在位置下的html文件夹

  • 代码文件

启动web server 服务

  • 服务器运行命令

njet -p /usr/local/njet -c conf/njet.conf
  • 访问 服务器公网IP:8080 看到如下页面即成功


参考资料

OpenNjet官网:https://njet.org.cn/

🎯 开发指南

📖 使用手册

OpenNjet官网--快速上手


http://www.mrgr.cn/p/15710752

相关文章

基于Springboot的在线博客网站

基于SpringbootVue的在线博客网站的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 博客标签 博客分类 博客列表 图库相册 后台登录 后台首页 用户管理 博客标…

Leaflet在WGS84 Web墨卡托投影与WGS84经纬度投影下空间信息变形问题及修正-以圆为例

目录 前言 一、投影的相关知识 1、经纬度投影 2、Web墨卡托投影 二、经纬度投影下的空间信息展示 1、空间信息展示 2、效果展示 3、经纬度投影下的圆修正 三、Web墨卡托投影下空间信息展示 1、底图引用 2、自定义生成圆 总结 前言 在GIS的知识海洋中,对…

QT--2

Qt界面设计 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->resize(680,520);this->setFixedSize(680,520);this->setWindowTitle("Tim");this->setWindowFla…

学习软考----数据库系统工程师24

关系数据库设计基础知识 函数依赖 码 多值依赖 性质

OpenVX技术图例(一)

OpenVX技术图例(一) 参考文献链接 https://registry.khronos.org/OpenVX/specs/1.1/html/index.html人工智能芯片与自动驾驶

一文了解栈

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、栈是什么?二、栈的实现思路1.顺序表实现2.单链表实现3.双向链表实现 三、接口函数的实现1.栈的定义2.栈的初始化3.栈的销毁4.入栈5.出栈6.返回栈…

GhostNetV2 Enhance Cheap Operation with Long-Range Attention 论文学习

论文地址:https://arxiv.org/abs/2211.12905 代码地址:https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/ghostnetv2_pytorch 解决了什么问题? 在计算机视觉领域,深度神经网络在诸多任务上扮演着重要角色。为…

详解MySQL常用的数据类型

前言 MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。本文将详细介绍MySQL中的数据类型,包括数值类型、字符…

鸿蒙编译子系统详解(二)main.py

1.5.4源码解析 1.5.4.1 build/hb/main.py脚本 这个脚本是编译的主程序脚本,流程如下: 首先是初始化各种module类,然后运行对应模块。 hb分为build,set,env,clean,tool,help几个模块,模块源码位于build/hb/modules/目录下&#xff…

本地部署大模型ollama+docker+open WebUI/Lobe Chat

文章目录 大模型工具Ollama下载安装运行Spring Ai 代码测试加依赖配置写代码 ollama的web&Desktop搭建部署Open WebUI有两种方式Docker DesktopDocker部署Open WebUIDocker部署Lobe Chat可以配置OpenAI的key也可以配置ollama 大模型的选择 本篇基于windows环境下配置 大模型…

IT项目管理【太原理工大学】前置知识点精简总结

根据上次考试以及其他方向考试的经验,这届考试可能偏向出题更灵活,能死记硬背或套公式的题减少,多做准备呀各位大三苦逼人,挂了补考还得回来补考凸^-^凸共勉 (另外,别作弊,今天人工智能考试逮住…

每天五分钟计算机视觉:通过交并比判断对象检测算法的性能

本文重点 在对象检测领域,交并比(Intersection over Union,简称IoU)是衡量算法性能的重要指标之一。它不仅直观地反映了预测框与真实框之间的重叠程度,还是判断算法是否“运行良好”的关键依据。 那个定位是好的? 对象检测任务中,我们希望不仅检测到对象,同时我们还希…

太阳能光伏在生活中的三大作用

随着现在太阳能光伏的逐步发展,太阳能光伏已经越来越走近人们的生活,小编带大家盘点一下光伏在生活中的应用 一、发电 光伏的最初应用就是用来发电,以替代传统的化石燃料发电方式。光伏发电可以从根本上解决当今社会面临的能源短缺问题&…

【数据结构】顺序表专题

前言 本篇文章我们来进行有关顺序表的专题训练,让我们一起来看一下有关顺序表的算法题 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 📝若有问题 评论区见 🎉欢迎大家点赞👍收藏⭐文章 1.移除…

洗地机什么牌子最好?618高性价比家用洗地机品牌

随着科技的发展,智能智能清洁家电越来越受到消费者的欢迎。洗地机作为其中的佼佼者,已经成为许多家庭清洁的好帮手。然而,面对满目琳琅的洗地机品牌型号,究竟哪一款机型适合家用呢,正好618也临近了,又有哪些…

30万买智驾车,选特斯拉还是华为?

文 | AUTO芯球 作者 | 雷歌 我真是佩服马斯克, 一趟24小时的北京出差,就解除了Model车系进入机关单位禁令的问题, 也打开了特斯拉FSD完全自动驾驶进入中国市场的大门, 给我我一天时间,估计一部剧都追不完&#xf…

LeetCode:盛最多水的容器

文章收录于LeetCode专栏 盛最多水的容器 给你n个非负整数a1,a2,…,an,每个数代表坐标中的一个点(i, ai) 。在坐标内画 n 条垂直线,垂直线i的两个端点分别为(i, ai) 和 (i, 0)。找出其中的两条线,使得它们与…

C++ 数据输入cin (解决CLoin输入中文程序出错)

数据输入cin语法:cin >> 变量 解决 CLoin 使用cin输入中文程序无法正常运行按住Ctrl+alt+shift+/键 弹出对话框选择注册表取消勾选run.process.with.pty

【再探】设计模式—适配器、装饰及外观模式

结构型设计模式是用于设计对象和类之间关系的一组设计模式。一共有7种:适配器模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式及代理模式。 1 适配器模式 需求:在软件维护阶段,已存在的方法与目标接口不匹配,需要个中…

rag-embeddings基础流程

什么是检索增强的生成模型 LLM 固有的局限性 LLM 的知识不是实时的LLM 可能不知道你私有的领域/业务知识 检索增强生成 RAG(Retrieval Augmented Generation)顾名思义,通过检索的方法来增强生成模型的能力。 类比:你可以把这个…