下一代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.mzph.cn/pingmian/7869.shtml

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

相关文章

休斯《公共管理导论》第5版/考研真题解析/章节题库

第一部分 考研真题精选 一、概念题二、简答题三、论述题四、案例分析题第二部分 章节题库 第1章 一个变革的时代第2章 政府的角色第3章 传统的公共行政模式第4章 公共管理第5章 公共政策第6章 治 理第7章 问 责第8章 利害关系人和外部环境第9章 管制、外包和公共企…

【机器学习与实现】线性回归示例——波士顿房价分析

目录 一、创建Pandas对象并查看数据的基本情况二、使用皮尔逊相关系数分析特征之间的相关性三、可视化不同特征与因变量MEDV(房价中值)间的相关性四、划分训练集和测试集并进行回归分析 一、创建Pandas对象并查看数据的基本情况 boston.csv数据集下载&a…

Go 语言基础之面向对象编程

1、OOP 首先,Go 语言并不是面向对象的语言,只是可以通过一些方法来模拟面向对象。 1.1、封装 Go 语言是通过结构体(struct)来实现封装的。 1.2、继承 继承主要由下面这三种方式实现: 1.2.1、嵌套匿名字段 //Add…

CoPilot 产品体验:提升 OpenNJet 的控制管理和服务提供能力

文章目录 前言系统架构介绍CoPilot 配置CoPilot 插件规范 体验 CoPilot 实例CoPilot: Broker 实例CoPilot: Ctrl 实例 开发其他语言编写的 CoPilot目标主要思路具体实现执行 go 程序代码 功能扩展总结 前言 CoPilot 是 OpenNJet 的一个重要组成部分,它在 Master-Wo…

246 基于matlab的交流电机动态方程

基于matlab的交流电机动态方程,用于交流电机动态分析。输入电机的额定功率(kW)、电机的额定转速(r/min)、转子外径(m)、铁心长(m)转子槽数、电机极对数 等参数,输出转速变化、力矩变化等结果。程序已调通,可直接运行。 246 交流电机动态 转速…

DAY 2

winget.cpp #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->resize(540,415);this->setFixedSize(540,415);//窗口标题this->setWindowTitle("盗版QQ");//窗口图标this->setWindowIcon(QIcon("E:\\qq\\pi…

30分钟打造属于自己的Flutter内存泄漏检测工具---FlutterLeakCanary

30分钟打造属于自己的Flutter内存泄漏检测工具 思路检测Dart 也有弱引用-----WeakReference如何执行Full GC?如何知道一个引用他的文件路径以及类名? 代码实践第一步,实现Full GC第二步,如何根据对象引用,获取出他的类…

HarmonyOS实战开发教程-如何开发一个2048游戏

今天为大家分享的是2048小游戏,先看效果图: 这个项目对于新手友友来说可能有一点难度,但是只要坚持看完一定会有收获。因为小编想分享的并不局限于ArkTs语言,而是编程思想。 这个游戏的基本逻辑是初始化一个4乘4的数组&#xff…

LeetCode 每日一题 Day 144-157

2385. 感染二叉树需要的总时间 给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。 每分钟,如果节点满足以下全部条件,就会被感染&#xf…

网络基础(1)网络编程套接字TCP,守护进程化

TCP协议 下面我们来学习一下TCP套接字的使用。 也就是使用一下基本的接口。首先TCP套接字的使用和UDP套接字的使用是大同小异的,但是多了一些步骤。 这里回顾一下:UDP是不可靠的,无连接的协议。而TCP则是可靠的,面向连接的协议…

[HUBUCTF 2022 新生赛]checkin

数组反序列化弱比较 <?php $info array(username>true,password>true); echo serialize($info); ?> //?infoa:2:{s:8:"username";b:1;s:8:"password";b:1;}1.构造不能用类&#xff0c;因为$data_unserialize只是一个变量&#xff0c;不能…

vivado Versal ACAP 可编程器件镜像 (PDI) 设置

Versal ACAP 可编程器件镜像 (PDI) 设置 下表所示 Versal ACAP 器件的器件配置设置可搭配 set_property <Setting> <Value> [current_design] Vivado 工具 Tcl 命令一起使用。 注释 &#xff1a; 在 Versal ACAP 架构上 &#xff0c; 原先支持将可编程器…

游戏技术人福音!当游戏语音碰到网易云信 ,我服了!

“开黑吗&#xff1f;五黑的那种” 少年时代&#xff0c;放假后偷偷溜进网吧&#xff0c;一边打着游戏&#xff0c;一边连麦吐槽对手的惬意岁月&#xff0c;不仅承载了无数 80 后、90 后&#xff0c;甚至 00 后的青春记忆&#xff0c;也让游戏语音成为了“游戏少年”闲暇生活的…

6W 1.5KVDC. 单、双输出 DC/DC 电源模块——TP2L-6W 系列

TP2L-6W系列是一款高性能、超小型的电源模块&#xff0c;2:1电压输入&#xff0c;输出有稳压和连续短路保护功能&#xff0c;隔离电压为1.5KVDC、作温度范围为–40℃到85℃。特别适合对输出电压的精度有严格要求的地方&#xff0c;外部遥控功能对您的设计又多一项选择&#xff…

HackMyVM-Slowman

目录 信息收集 arp nmap whatweb WEB web信息收集 gobuster FTP匿名登录 hydra mysql爆破 mysql登录 fcrackzip爆破 hashcat爆破 ssh登录 提权 系统信息收集 python Capabilities提权 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interf…

类加载器aa

一&#xff0c;关系图及各自管辖范围 &#xff08;不赘述&#xff09; 二&#xff0c;查看关系 package com.jiazai;public class Main {public static void main(String[] args) {ClassLoader appClassLoader ClassLoader.getSystemClassLoader();//默认System.out.println…

关于在Conda创建的虚拟环境中安装好OpenCV包后,在Pycharm中依然无法使用且import cv2时报错的问题

如果你也掉进这个坑里了&#xff0c;请记住opencv-python&#xff01;opencv-python&#xff01;&#xff01;opencv-python&#xff01;&#xff01;&#xff01; 不要贪图省事直接在Anaconda界面中自动勾选安装libopencv/opencv/py-opencv包&#xff0c;或者在Pycharm中的解…

Linux搭建http发布yum源

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

VUE v-for 数据引用

VUE 的数据引用有多种方式。 直接输出数据 如果我们希望页面中直接输出数据就可以使用&#xff1a; {{ pageNumber }}双括号引用的方式即可。 在 JavaScript 中引用 如果你需要直接在代码中使用&#xff0c;直接使用变量名就可以了。 上面这张小图&#xff0c;显示了引用的…