第一步:准备“施工工具”(安装依赖)
编译源码需要用到 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第三步:配置、编译与安装(核心!)
这是最关键的一步,我们只需要执行三个命令:
配置(检查环境,准备编译):
./configure编译(把代码翻译成机器能懂的语言):
make安装(把编译好的文件放到系统目录里):
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; }4. session_sticky Cookie 会话保持(优于 ip_hash)
解决公司内网所有人同一个 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,容易造成短暂连接中断。