tengine知识点

第一步:准备"施工工具"(安装依赖)

编译源码需要用到 C 语言编译器和一些基础库。在 Linux 终端输入以下命令:

复制代码
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
第二步:下载并解压源码

去 Tengine 官网下载源码包,然后解压。老师这里以 3.1.0 版本为例:

复制代码
wget http://tengine.taobao.org/download/tengine-3.1.0.tar.gz
tar -zxvf tengine-3.1.0.tar.gz
cd tengine-3.1.0
第三步:配置、编译与安装(核心!)

这是最关键的一步,我们只需要执行三个命令:

  1. 配置(检查环境,准备编译):

    复制代码
    ./configure
  2. 编译(把代码翻译成机器能懂的语言):

    复制代码
    make
  3. 安装(把编译好的文件放到系统目录里):

    复制代码
    make install

4.检查

复制代码
cd /usr/local/nginx/sbin 
 ./nginx -v       查看版本
./nginx           启动
./nginx -s stop   停止
./nginx -t        语法检查
./nginx -s relaod 重载配置

5.加入环境变量

复制代码
#临时生效
export PATH=$PATH:/usr/local/nginx/sbin

#永久生效
echo "export PATH=$PATH:/usr/local/nginx/sbin" >>/etc/profile
source /etc/profile

===================================

Tengine 是阿里基于官方 Nginx 二次开发,100% 兼容 Nginx 所有配置、指令、模块,你写的 nginx.conf 直接丢给 Tengine 就能跑; 所有原生 Nginx 有的能力它全都保留

一、负载均衡系列(Tengine 最核心新增)

1. VNSWRR 平滑加权轮询(替代原生加权轮询)

原生 Nginx 加权轮询:权重差距大时流量扎堆; Tengine 默认 upstream 就是平滑加权,无需额外指令。

复制代码
upstream web_server {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=1;
    # Tengine自动启用VNSWRR,流量均匀打散
}

server {
    listen 80;
    location / {
        proxy_pass http://web_server;
    }
}

2. 内置主动健康检查(原生 Nginx 无,必须第三方模块)

复制代码
upstream web_server {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=1;

    # 开启主动健康探测
    check interval=2000 rise=2 fall=3 timeout=1000 type=http;
    # 每隔2秒探测一次;连续2次成功标记上线;连续3次失败标记宕机;超时1秒
    check_http_send "HEAD /health HTTP/1.1\r\nHost:localhost\r\nConnection:close\r\n\r\n";
    # 访问后端健康接口
    check_http_expect_alive http_2xx http_3xx;
    # 返回2xx/3xx判定节点正常
}

3. consistent_hash 一致性哈希(内置)

常用于图片缓存、会话绑定,按 URL 哈希

复制代码
upstream cache_cluster {
    consistent_hash $request_uri; # 根据请求地址哈希
    server 192.168.2.10:80;
    server 192.168.2.11:80;
    server 192.168.2.12:80;
}

解决公司内网所有人同一个 IP 挤一台服务的问题

复制代码
upstream app {
    session_sticky; # 下发cookie绑定后端节点
    server 192.168.3.10:8080;
    server 192.168.3.11:8080;
}

5. dyups 后端域名动态解析

原生 Nginx upstream 域名只启动时解析一次;Tengine 自动定时刷新 DNS

复制代码
upstream api {
    server api.service.com:8080; # 填写域名
    dyups; # 开启动态域名解析
}

二、系统 & 并发性能优化配置

1. reuseport 多核端口复用优化(强化版)

复制代码
events {
    worker_connections 10240;
    reuse_port on; # Tengine深度优化,多核并发暴涨
}

2. sysguard 系统过载保护(原生 Nginx 没有)

服务器内存 / CPU 过高时拒绝新连接,防止被 OOM 杀死

复制代码
sysguard on;
# CPU持续超过85%触发保护
sysguard cpu_max 85;
# 剩余内存小于512MB触发保护
sysguard mem_min 512M;

3. CPU 亲缘绑定(自动绑定 worker 到 CPU 核心)

复制代码
worker_cpu_affinity auto;

三、静态资源加速:concat 资源合并

把多个 js/css 一次请求加载,减少 HTTP 次数

复制代码
server {
    listen 80;
    server_name static.test.com;

    location ~* \.(js|css)$ {
        concat on;
        concat_max_files 10; # 最多合并10个文件
        expires 7d;
    }
}

访问示例: http://static.test.com/1.js,2.js,3.css 网关自动合并文件返回。

trim 精简 HTML/JS 空白字符、注释

复制代码
location ~* \.(html|js|css)$ {
    trim on;
}

四、日志与运维监控

1. 异步日志(海量访问不阻塞进程)

复制代码
http {
    # 开启异步日志
    access_log /usr/local/tengine/logs/access.log main async;
}

2. reqstat 内置实时流量监控

无需安装插件,直接访问查看 QPS、耗时、错误码

复制代码
server {
    listen 8088;
    location /reqstat {
        reqstat;
    }
}

浏览器访问 http://ip:8088/reqstat 查看全量流量统计

3. 自动生成 X-Request-ID 全链路追踪

复制代码
http {
    reqid on;
    log_format main '$remote_addr [$time_local] "$request" $status $request_time $reqid';
}

日志会带上唯一请求 ID,传给后端服务方便排查链路故障。

五、SSL/HTTPS 异步优化

异步 SSL 握手,降低 HTTPS CPU 消耗

复制代码
server {
    listen 443 ssl async; # async 异步SSL(Tengine新增)
    server_name www.test.com;

    ssl_certificate cert/test.pem;
    ssl_certificate_key cert/test.key;
    ssl_protocols TLSv1.2 TLSv1.3;
}

六、限流增强(原生 limit_req 优化)

复制代码
http {
    limit_req_zone $binary_remote_addr zone=rate:10m rate=100r/s;
}

server {
    location / {
        limit_req zone=rate burst=20 nodelay;
        proxy_pass http://backend;
    }
}

七、Lua 简单脚本示例(预装 Lua,不用自行编译)

修改响应头、简单鉴权场景

复制代码
location /lua_demo {
    content_by_lua '
        ngx.header["Server"] = "Tengine";
        ngx.say("hello tengine lua");
    ';
}

八、常用启停命令(和 Nginx 一致,多了模块查看)

复制代码
tengine -t        # 校验配置
tengine -s reload  # 平滑重载
tengine -V         # 查看版本+编译模块
tengine -m         # Tengine特有:列出所有加载模块

九、Tengine-Ingress 云原生核心优势(文字说明无本地配置)

K8s 场景下: 修改路由、域名、证书、后端权重不需要 reload,配置热生效,长连接不会断开; 原生 Nginx Ingress 每次变更都要 reload,容易造成短暂连接中断。

相关推荐
雾时之林6 小时前
Linux--软件管理、源码包安装
linux·服务器·数据库
sxstj9 小时前
Ubuntu 完整安装并启用 Flatpak 教程
linux·运维·ubuntu
Sylvia33.9 小时前
从轮询到推送:足球数据API架构演进与火星数据技术拆解
java·服务器·网络·python·websocket·架构
RisunJan10 小时前
Linux命令-sshd(SSH 服务器守护进程)
linux·服务器·ssh
天疆说10 小时前
Ubuntu 26.04 下 Intel Meteor Lake 核显 + NPU 驱动配置与 PyTorch NPU 推理实测
linux·pytorch·ubuntu
2401_8685347810 小时前
存储与虚拟化
linux·网络协议
mounter62510 小时前
突破单点限制:BPF 多跟踪点高效附加机制与新 ftrace 架构解析
linux·ebpf·linux kernel·kernel·ftrace
刘某的Cloud10 小时前
Galera Cluster部署 mariadb 节点down机,log sequence number恢复
linux·运维·数据库·负载均衡·mariadb·集群·高可用
小此方10 小时前
Re:Linux系统篇(五十四)线程篇 · 七:互斥锁的底层实现原理:从硬件上下文、原子交换指令(Swap)到并发封装实战
linux·运维·驱动开发