下一代Nginx? OpenNjet 的入门实践

2024-05-08 01:44

本文主要是介绍下一代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官网--快速上手

这篇关于下一代Nginx? OpenNjet 的入门实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968957

相关文章

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

Keepalived+Nginx双机配置小结

《Keepalived+Nginx双机配置小结》本文主要介绍了Keepalived+Nginx双机配置小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1.1 软硬件要求1.2 部署前服务器配置调优1.3 Nginx+Keepalived部署1.3