下一代Nginx? OpenNjet 的入门实践

何为 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.rhkb.cn/news/321173.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习第二天(监督学习,无监督学习,强化学习,混合学习)

1.是什么 基于数据寻找规律从而建立关系,进行升级,如果是以前的固定算式那就是符号学习了 2.基本框架 3.监督学习和无监督式学习: 监督学习:根据正确结果进行数据的训练; 在监督式学习中,训练数据包括输…

Python urllib 爬虫入门(1)

本文主要为Python urllib类库函数和属性介绍及一些简单示例。 目录 urllib爬取网页 简单示例 写入文件 其他读取方法 readline函数 readlines函数 response属性 当前环境信息 返回状态码 返回url地址 对url进行编码与解码 写入文件 总结 urllib爬取网页 通过pyth…

automa警惕通过点击元素打开新的标签页,因为你可能会被他蒙蔽!

大家好,我是大胡子,专注于研究RPA实战与解决方案。 我们经常用到automa里面的【点击元素】组件,但要警惕通过点击元素打开新的标签页,例如下面这个场景,点击公众号的图文消息,之后,要自动输入标…

HCIP的学习(13)

第五章,重发布和路由策略 重发布 ​ 在路由协议的边界设备上,将某一种路由协议的路由信息引入到另一种路由协议中,这个操作被称为路由引入或者路由重分发。----技术本质为重发布。 条件 必须存在ASBR设备(路由边界设备&#x…

《QT实用小工具·五十九》随机图形验证码,带有一些可人的交互与动画

1、概述 源码放在文章末尾 该项目实现了可交互的动画验证码控件,趣味性十足: 字符变换动画 噪音动画 可拖动交互 项目demo演示如下所示: 项目部分代码如下所示: #ifndef CAPTCHAMOVABLELABEL_H #define CAPTCHAMOVABLELABEL…

【Pytorch】6.torch.nn.functional.conv2d的使用

阅读之前应该先了解基础的CNN网络的逻辑 conv2d的作用 是PyTorch中用于执行二维卷积操作的函数。它的作用是对输入数据进行二维卷积操作,通常用于图像处理和深度学习中的卷积神经网络(CNN)模型。 conv2d的使用 我们先查看一下官方文档 inpu…

nn.TransformerEncoderLayer详细解释,使用方法!!

nn.TransformerEncoderLayer nn.TransformerEncoderLayer 是 PyTorch 的 torch.nn 模块中提供的一个类,用于实现 Transformer 编码器的一个单独的层。Transformer 编码器层通常包括一个自注意力机制和一个前馈神经网络,中间可能还包含层归一化&#xff…

AutoTable, Hibernate自动建立表替代方案

痛点 之前一直使用JPA为主要ORM技术栈,主要是因为Mybatis没有实体逆向建表功能。虽然Mybatis有从数据库建立实体,但是实际应用却没那么美好:当实体变更时,往往不会单独再建立一个数据库重新生成表,然后把表再逆向为实…

matplotlib和pandas与numpy

1.matplotlib介绍 一个2D绘图库; 2.Pandas介绍: Pandas一个分析结构化数据的工具; 3.NumPy 一个处理n纬数组的包; 4.实践:绘图matplotlip figure()生成一个图像实例 %matplotlib inline:图形直接在…

(三)JSP教程——JSP动作标签

JSP动作标签 用户可以使用JSP动作标签向当前输出流输出数据&#xff0c;进行页面定向&#xff0c;也可以通过动作标签使用、修改和创建对象。 <jsp:include>标签 <jsp:include>标签将同一个Web应用中静态或动态资源包含到当前页面中。资源可以是HTML、JSP页面和文…

5月6(信息差)

&#x1f30d;一次预测多个token&#xff0c;Meta新模型推理加速3倍&#xff0c;编程任务提高17% https://hub.baai.ac.cn/view/36857 &#x1f384; LeetCode 周赛超越 80% 人类选手&#xff0c;推理性能超 Llama3-70B。 ✨ 我国量子计算机实现“四算合一” 实现通算、…

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(命令行方式)】

Hi3516标准系统入门&#xff08;命令行方式&#xff09; 注意&#xff1a; 从3.2版本起&#xff0c;标准系统不再针对Hi3516DV300进行适配验证&#xff0c;建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作&#xff0c;则可能会…

一加12/11/10/Ace2/Ace3手机上锁回锁BL无限重启黑屏9008模式救砖

一加12/11/10/Ace2/Ace3手机官方都支持解锁BL&#xff0c;搞机的用户也比较多&#xff0c;相对于其他品牌来说&#xff0c;并没有做出限制&#xff0c;这也可能是搞机党最后的救命稻草。而厌倦了root搞机的用户&#xff0c;就习惯性回锁BL&#xff0c;希望彻底变回官方原来的样…

数字旅游以科技创新为核心:推动旅游服务的智能化、精准化、个性化,为游客提供更加贴心、专业、高效的旅游服务

目录 一、引言 二、数字旅游以科技创新推动旅游服务智能化 1、智能化技术的应用 2、提升旅游服务的效率和质量 三、数字旅游以科技创新推动旅游服务精准化 1、精准化需求的识别与满足 2、精准化营销与推广 四、数字旅游以科技创新推动旅游服务个性化 1、个性化服务的创…

3D相机及应用

无论是2D相机和3D相机&#xff0c;在工业应用中都有着不可或缺的作用。3D相机与2D相机的最大区别在于&#xff0c;3D相机可以获取真实世界尺度下的3D信息&#xff0c;而2D相机只能获取像素尺度下的2D平面图像信息。通过3D相机得到的数据&#xff0c;我们可以还原出被测量物体的…

java线上问题排查之内存分析(三)

java线上问题排查之内存分析 使用top命令 top命令显示的结果列表中&#xff0c;会看到%MEM这一列&#xff0c;这里可以看到你的进程可能对内存的使用率特别高。以查看正在运行的进程和系统负载信息&#xff0c;包括cpu负载、内存使用、各个进程所占系统资源等。 2.用jstat命令…

RapidJSON介绍

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…

从互联网医院源码到搭建:开发视频问诊小程序的技术解析

如今&#xff0c;视频问诊小程序作为医疗服务的一种新形式&#xff0c;正逐渐受到人们的关注和青睐。今天&#xff0c;小编将为您详解视频问诊小程序的开发流程。 一、背景介绍 互联网医院源码是视频问诊小程序开发的基础&#xff0c;它提供了一套完整的医疗服务系统框架&…

Windows PC上从零开始部署ChatGML-6B-int4量化模型

引言 ChatGLM-6B是清华大学知识工程和数据挖掘小组&#xff08;Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University&#xff09;发布的一个开源的对话机器人。6B表示这是ChatGLM模型的60亿参数的小规模版本&#xff0c;约60亿参数。 ChatGML-6B-in…

spring高级篇(七)

1、异常处理 在DispatcherServlet中&#xff0c;doDispatch(HttpServletRequest request, HttpServletResponse response) 方法用于进行任务处理&#xff1a; 在捕获到异常后没有立刻进行处理&#xff0c;而是先用一个局部变量dispatchException进行记录&#xff0c;然后统一由…