下一代Nginx? OpenNjet 的入门实践

news2024/12/25 23:51:53

何为 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=OpenNJet
 baseurl=https://njet.org.cn/download/linux/centos/$releasever/$basearch/
    enabled=1
    gpgcheck=1
 gpgkey=https://njet.org.cn/download/linux/centos/RPM-GPG-KEY-OpenNJet
 " > /etc/yum.repos.d/njet.repo

上面是官方给的命令,(在执行第二步-- yum clean all)可能会提示报错如下:
Loaded plugins: fastestmirror, langpacks


File 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 mirrors

yum 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;
       # 嘻嘻 我的网站就叫 SiliSili
       server_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.coloradmin.cn/o/1649832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Java中如何有效地处理内存泄露

在Java中,处理内存泄露有多种方法,以下是其中三种常见的方法及其原理和适用场景: ## 1. 合理使用垃圾回收机制 Java中的垃圾回收机制(Garbage Collection,GC)是一种自动化的内存管理技术,它可以…

如何获得一个Oracle 23ai数据库(Virtual Appliance)

准确的说,是Oracle 23ai Free Developer版,因为企业版目前只在云上(OCI和Azure)和ECC上提供。 方法包括3种,本文介绍第1种: Virtual ApplianceRPM安装Docker 从此处下载虚拟机。 可以看到虚拟机需要4G内…

表空间的创建

目录 表空间创建的语法 表空间创建的例子 创建一个永久性表空间,设置表空间初始大小为100MB,自动扩展为 100MB,无最大大小限制,并且该表空间为在线状态,产生日志 创建一个永久性表空间,通过本地化管理方…

AI编码时代到来?实现编程梦想的利器—Baidu Comate测评

文章目录 Comate智能编码是什么?Comate支持的环境 Comate应用安装实际操作对话式生成代码生成代码注释智能单测项目测试调优功能 总结 Comate智能编码是什么? 在如今这个拥抱AI的时代,市面上已经产出了很多Ai代码助手,如果你还没…

无法添加以供审核,提交以供审核时遇到意外错误。如果问题仍然存在,请联系我们

遇到问题: 无法添加以供审核 要开始审核流程,必须提供以下项目: 提交以供审核时遇到意外错误。如果问题仍然存在,请联系我们。 解决办法: 修改备案号为小写, 例如:京ICP备2023013223号-2A 改…

酸奶(科普)

酸奶(yogurt)是一种酸甜口味的牛奶饮品,是以牛奶为原料,经过巴氏杀菌后再向牛奶中添加有益菌(发酵剂),经发酵后,再冷却灌装的一种牛奶制品。市场上酸奶制品多以凝固型、搅拌型和添加…

Verilog刷题笔记47

题目: From a 1000 Hz clock, derive a 1 Hz signal, called OneHertz, that could be used to drive an Enable signal for a set of hour/minute/second counters to create a digital wall clock. Since we want the clock to count once per second, the OneHer…

3行代码,实现一个取色器

前言 今天发现了一个很好玩的 API ——EyeDropper。 EyeDropper API 提供了一种创建拾色器工具的机制。使用该工具,用户可以从屏幕上取样颜色,包括浏览器窗口之外的区域。 这是 MDN 上对它的介绍,可以取包括浏览器窗口之外的区域。我们一起看看是怎么个事 什么是取色器 取…

Ecovadis认证是什么?

Ecovadis认证是一种企业社会责任(CSR)评估和评级的认证,旨在衡量企业在环境、劳工和人权、道德以及可持续采购四个方面的可持续发展表现。该认证已成为全球范围内许多公司和组织的评估标准之一,有助于提高企业的会声誉和可持续发展…

医药垃圾分类管理系统|基于SSM医药垃圾分类管理系统的系统设计与实现(源码+数据库+文档)

医药垃圾分类管理系统 目录 基于SSM医药垃圾分类管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统登录模块 2管理员模块实现 3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博…

找不到模块“vue-router”。你的意思是要将 moduleResolution 选项设置为 node,还是要将别名添加到 paths 选项中?

在tsconfig.app.json中添加,记得一定是 tsconfig.app.json 中,如添加到 tsconfig.node.json 还是会报错的 哈哈哈哈,不瞒你们,我就添加错了,哈哈哈。所以这也算写一个demo提醒自己 "compilerOptions": {&qu…

FTP协议与工作原理

一、FTP协议 FTP(FileTransferProtocol)文件传输协议:用于Internet上的控制文件的双向传输,是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同…

四川景源畅信:抖音的运营策略有哪些?

在数字营销的大潮中,抖音以其巨大的用户基础和强大的传播力成为众多品牌和商家的必争之地。那么,抖音的运营策略有哪些呢?这个问题涉及到内容创作、用户互动、数据分析和品牌合作等多个方面。 一、内容创作与优化在抖音,内容是吸引用户的关键…

无卤素产品是什么?有什么作用?

无卤素产品,即在生产过程中完全不使用卤素元素——氟、氯、溴、碘等——的产品。 卤素元素,虽然在电子设备、材料等领域应用广泛,却也可能潜藏危害。其阻燃剂,一旦在产品生命周期结束后释放,将对土壤和水体造成污染&a…

代码随想录day19day20打卡

二叉树 1 二叉树的最大深度和最小深度 最大深度已经学习过了,实质就是递归的去判断左右子节点的深度,然后对其进行返回。 附加两个学习的部分: (1)使用前序遍历的方法求解 int result; void getdepth(TreeNode* nod…

08 - 条件判断语句

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 条件判断语句2. 语法说明3. 经验4. 代码 1. 条件判断语句 makefile 中支持条件判断语句 可以根据条件的值来决定 make 的执行可以比较两个不同变量或者变量和常量的值 注:条件判断语句只能用于控制 make 实际执行的…

[译]Elasticsearch _source Doc_values And Store Performance

原文地址 https://sease.io/2021/02/field-retrieval-performance-in-elasticsearch.html 在这篇博文中,我想从性能的角度探讨 Elasticsearch 为我们存储字段和查询时检索字段提供了哪些可能性。 事实上,Lucene(Elasticsearch 和 Solr 构建的…

【C++STL详解(七)】--------stack和queue介绍与使用

目录 前言 一、stack Ⅰ.介绍 Ⅱ.使用 1、定义方式 2、常用接口: 3、使用示例 二、queue Ⅰ、介绍 Ⅱ、使用 1、定义方式 2、常用接口 3、使用示例 三、deque(了解) 四、容器适配器 前言 前面我们已经在数据结构中已经了解到有关栈和队列的相关知识&…

Linux搭建http发布yum源

1、搭建http源yum仓库 (1)在yum仓库服务端安装httpd yum -y install httpd (2)修改配置文件 我们httpd 中默认提供web 界面的位置是我们/var/www/html 目录,如果我们yum 源想指定目录,就需要修改蓝框2处…

产品需求文档怎么写?超详细的产品需求文档PRD模板来了!

产品需求文档怎么写?如何写一份简洁明了、外行人看了就能秒懂的产品需求文档呢?今天这篇文章,就来和大家分享如何编写一份高质量的产品需求文档 PRD! 下图是来自 boardmix 模板社区的「产品需求文档」模板,它给出了一…