第一步:准备"施工工具"(安装依赖)
编译源码需要用到 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,容易造成短暂连接中断。
