Tengine:Nginx二次开发-高性能进化

前言:在当今的互联网时代,Web 服务器的性能和稳定性对于网站的成功至关重要。Nginx 以其高性能和可扩展性而闻名,但有时候,我们需要更多的特性来满足特定的业务需求。Tengine,作为一个由淘宝网发起的 Nginx 二次开发版本,不仅继承了 Nginx 的所有特性,还添加了许多高级功能和特性,以适应大访问量网站的需求。本文将详细介绍 Tengine 的特性、安装、配置以及如何利用其动态模块和 concat 模块来优化 Web 服务。让我们一起探索如何通过 Tengine 提升我们的 Web 服务平台。

1、Tengine 概览

Tengine 是基于 Nginx 的 Web 服务器项目,由淘宝网发起,专为高流量网站设计。它不仅在性能和稳定性上得到了大型网站如淘宝网、天猫商城的验证,还致力于提供一个高效、稳定、安全、易用的 Web 平台。

2 、Tengine 资源

  • 官网:http://tengine.taobao.org
  • 官方文档:http://tengine.taobao.org/documentation_cn.html

3、 Tengine 特性

Tengine 继承了 Nginx-1.16.0 的所有特性,并兼容 Nginx 的配置。以下是 Tengine 的一些关键特性:

  • 支持 HTTP 的 CONNECT 方法,适用于正向代理场景。
  • 支持异步 OpenSSL,可以使用硬件如 QAT 进行 HTTPS 的加速与卸载。
  • 增强运维、监控能力,如异步打印日志及回滚、本地 DNS 缓存、内存监控等。
  • Stream 模块支持 server_name 指令。
  • 更加强大的负载均衡能力,包括一致性 hash 模块、会话保持模块,还可以对后端服务器进行主动健康检查。
  • 支持设置 proxy、memcached、fastcgi、scgi、uwsgi 在后端失败时的重试次数。
  • 动态脚本语言 Lua 支持,扩展功能非常高效简单。
  • 支持按指定关键字(域名,url 等)收集 Tengine 运行状态。
  • 组合多个 CSS、JavaScript 文件的访问请求变成一个请求。
  • 自动去除空白字符和注释,减小页面体积。
  • 自动根据 CPU 数目设置进程个数和绑定 CPU 亲缘性。
  • 监控系统的负载和资源占用,对系统进行保护。
  • 显示对运维人员更友好的出错信息,便于定位出错机器。
  • 更强大的防攻击(访问速度限制)模块。
  • 更方便的命令行参数,如列出编译的模块列表、支持的指令等。
  • 可以根据访问文件类型设置过期时间。

4、 动态模块

① 编译安装 Tengine-2.1.2

Tengine 支持运行时动态加载模块,无需每次都重新编译 Tengine。以下是编译安装 Tengine-2.1.2 的步骤:

  1. 安装依赖:

    yum -y install gcc pcre-devel openssl-devel
    
  2. 创建用户:

    useradd -r -s /sbin/nologin nginx
    
  3. 下载并解压 Tengine 源码:

    cd /usr/local/src
    wget http://tengine.taobao.org/download/tengine-2.1.2.tar.gz 
    tar xf tengine-2.1.2.tar.gz
    cd tengine-2.1.2/
    
  4. 配置并编译安装:

    ./configure --prefix=/apps/tengine-2.1.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
    make && make install
    
  5. 链接二进制文件:

    ln -s /apps/tengine-2.1.2/sbin/* /usr/sbin/
    
  6. 启动 Tengine:

    nginx
    

② 在 Tengine-2.1.2 中添加 Lua 动态模块

  1. 安装 Lua 开发包:

    yum -y install lua-devel
    
  2. 重新配置并安装 Lua 模块:

    ./configure --prefix=/apps/tengine-2.1.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-http_lua_module=shared
    make dso_install
    
  3. 修改配置文件以加载 Lua 模块:

    vim /apps/tengine-2.1.2/conf/nginx.conf
    

    dso 块中添加:

    dso {load ngx_http_lua_module.so;
    }
    
  4. 检查配置并重启 Tengine:

    nginx -t
    nginx -s reload
    

③ 编译安装 Tengine-2.3.2

Tengine-2.3.2 的编译安装步骤与 Tengine-2.1.2 类似,但增加了 Stream 模块的支持。

  1. 安装依赖:

    yum -y install gcc pcre-devel openssl-devel
    
  2. 创建用户:

    useradd -r -s /sbin/nologin nginx
    
  3. 下载并解压 Tengine 源码:

    cd /usr/local/src
    wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz 
    tar xvf tengine-2.3.2.tar.gz
    cd tengine-2.3.2/
    
  4. 配置并编译安装:

    ./configure --prefix=/apps/tengine-2.3.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
    make && make install
    
  5. 链接二进制文件:

    ln -s /apps/tengine-2.3.2/sbin/* /usr/sbin/
    
  6. 启动 Tengine:

    nginx
    

5、 Concat 模块使用

① Concat 模块说明

Concat 模块用于合并多个文件在一个响应报文中,类似于 Apache 的 mod_concat 模块。这有助于减少 HTTP 请求数量,提高网站加载速度和用户体验。

② 编译安装 Concat 模块

  1. 确认 Tengine 版本是否支持 concat 模块:

    ./configure --help | grep http_concat
    
  2. 配置并编译安装 concat 模块:

    ./configure --prefix=/apps/tengine-2.1.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-http_lua_module=shared --with-http_concat_module=shared
    make dso_install
    
  3. 修改配置文件以启用 concat 模块:

    vim /apps/tengine-2.1.2/conf/nginx.conf
    

    location 块中添加:

    location /static/css/ {concat on;concat_max_files 20;
    }location /static/js/ {concat on;concat_max_files 30;
    }
    
  4. 检查配置并重启 Tengine:

    nginx -t
    nginx -s reload
    

6、 Tengine 配置文件

Tengine 兼容 Nginx 指定版本的配置参数,允许用户在不修改配置的情况下迁移到 Tengine。用户可以根据需要调整配置文件,以充分利用 Tengine 提供的高级功能和特性。


以上是 Tengine 的详细介绍,包括其特性、安装步骤、动态模块的使用以及 concat 模块的配置。Tengine 是一个强大的 Nginx 二次开发版本,适用于需要高性能、高稳定性和高级功能的 Web 服务器环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63559.shtml

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

相关文章

RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGB

RK3588 ,基于FFmpeg, 拉取RTSP,使用 mpp 实现硬解码. ⚡️ 传送 ➡️ Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBRK3588 , mpp硬编码yuv, 保存MP4视频文件.

Windows 下 Anaconda的安装与配置 GPU 版

给之前的电脑安一下深度学习环境 判断是否有NVIDIA GPU Ctrl Shift Esc 打开任务管理器 带此字眼表示有 NVIDIA GPU 安装Anaconda anaconda 打开邮箱会看到下载链接 这里建议修改为其他盘,要不然下载的包和创建的环境都在C盘,占用空间 三个都打钩 取…

【openssl】 version `OPENSSL_3.0.3‘ not found 问题

【openssl】 version OPENSSL_3.0.3 not found 问题 使用openssl时候报错: openssl lib/libcrypto.so.3: version OPENSSL_3.0.3 not found查阅CSDN发现有博主说把别的地方的libcrypto.so.3 复制过去就好了。 尝试无效 警告!这个操作不对: 不…

flask flask-socketio创建一个网页聊天应用

应用所需环境: python 3.11.11 其他 只需要通过这个命令即可 pip install flask3.1.0 Flask-SocketIO5.4.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 最好是用conda创建一个新的虚拟环境来验证 完整的pip list如下 Package Version ----…

联邦学习防止数据泄露

文章目录 联邦学习防止数据泄露的原理联邦学习的优势联邦学习与集中式学习的成本分析联邦学习的实际应用案例个人设想参考文献 联邦学习 (Federated Learning) 是一种分布式机器学习技术,旨在解决数据隐私保护问题。它允许在分散的数据源上进行模型训练,…

STM32 水质水位检测项目(硬件架构)及(软件架构)

硬件选型 水位测量模块 TDS采集模块 外置ADC模块(ADS1115) 水位测量模块使用方法 水位测量原理 压力传感器:水越深压力越大 P ρgh Fps Fρgh*s P大气压 水位测量传感器本质上是一个压力测量传感器。压力的值和传感器产生的电压值是线…

C# 6.0 连接elasticsearch数据库

在 C# 6.0 中连接 Elasticsearch 数据库,您可以使用官方的 Elasticsearch 客户端库 NEST。NEST 是一个高性能的 .NET 客户端,用于与 Elasticsearch 进行交互。以下是一个详细的步骤指南,帮助您在 C# 6.0 项目中连接和操作 Elasticsearch。 1. 安装 NEST 包 首先,您需要在您…

服务器数据恢复—RAIDZ离线硬盘数超过热备盘数导致阵列崩溃的数据恢复案例

服务器存储数据恢复环境: ZFS Storage 7320存储阵列中有32块硬盘。32块硬盘分为4组,每组8块硬盘,共组建了3组RAIDZ,每组raid都配置了热备盘。 服务器存储故障: 服务器存储运行过程中突然崩溃,排除人为误操…

Java转C++之编程范式

1. 过程式编程(Procedural Programming) 在 C 中的表现 过程式编程是通过一系列的函数调用来实现程序的功能。函数是核心构建单元,数据和操作通过函数进行交互。 C 中:可以使用普通的函数和全局变量来进行过程式编程。Java 中&…

llama2中的model.py中的结构示意图

参考文章:https://zhuanlan.zhihu.com/p/679640407

开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述

定义 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)是一种目标检测任务,旨在检测和识别那些未在训练集中明确标注的物体类别。传统的目标检测模型通常只能识别有限数量的预定义类别,而OVOD模型则具有识别“开放词汇…

Vue与React:前端框架的巅峰对决

文章目录 一、引言(一)前端框架发展现状简述 二、Vue 与 React 框架概述(一)Vue.js 简介(二)React.js 简介 三、开发效率对比(一)Vue 开发效率分析(二)React …

3分钟读懂数据分析的流程是什么

数据分析是基于商业目的,有目的地进行收集、整理、加工和分析数据,提炼出有价值的 信息的一个过程。整个过程大致可分为五个阶段,具体如下图所示。 1.明确目的和思路 在开展数据分析之前,我们必须要搞清楚几个问题,比…

vba批量化调整word的图和图表标题

vba代码 将图片进行居中操作 Sub ChangePictureFormate()Dim oPara As ParagraphDim oRange As RangeDim i As LongDim beforeIsPicture As BooleanbeforesIsPicture False 确保文档中至少有图片If ActiveDocument.InlineShapes.Count 0 ThenMsgBox "没有找到图片。&qu…

llama.cpp:PC端测试 MobileVLM -- 电脑端部署图生文大模型

llama.cpp:PC端测试 MobileVLM 1.环境需要2.构建项目3.PC测试 1.环境需要 以下是经实验验证可行的环境参考,也可尝试其他版本。 (1)PC:Ubuntu 22.04.4 (2)软件环境:如下表所示 工…

词嵌入(Word Embedding):自然语言处理的基石

目录 ​编辑 词嵌入(Word Embedding):自然语言处理的基石 引言 词嵌入的基本概念 词嵌入的主要方法 1. Word2Vec 2. GloVe 3. FastText 4. ELMo 5. BERT 词嵌入的应用场景 词嵌入的研究进展 结论 词嵌入(Word Embedd…

AutoSarOS中调度表的概念与源代码解析

--------AutoSarOS调度表的概念 一、AutoSarOS 是什么以及调度表的重要性 AutoSar(Automotive Open System Architecture)是汽车行业的一个开放式软件架构标准哦。它就像是一种大家都遵循的规则,能让不同的软件供应商一起合作开发汽车软件,这样软件就能被重复使用,开发效…

半连接转内连接 | OceanBase SQL 查询改写

查询优化器是关系型数据库系统的核心模块,是数据库内核开发的重点和难点,也是衡量整个数据库系统成熟度的“试金石”。为了帮助大家更好地理解 OceanBase 查询优化器,我们撰写了查询改写系列文章,带大家更好地掌握查询改写的精髓&…

android opencv导入进行编译

1、直接新建module进行导入,选择opencv的sdk 导入module模式,选择下载好的sdk,修改module name为OpenCV490。 有报错直接解决报错,没报错直接运行成功。 2、解决错误,同步成功 一般报错是gradle版本问题较多。我的报…

通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统

背景介绍 阿里云向量检索服务Milvus版(简称阿里云Milvus)是一款云上全托管服务,确保了了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相…