告别 Nginx 假死!Tengine 一键离线安装脚本 + 主动健康检查(附源码)

内网部署的痛,懂的都懂
作为一名运维或后端开发,最怕听到的一句话是什么?
“服务器在内网,不通外网,不能用 yum/apt,你去装个 Nginx 吧。”
哪怕是老手,面对离线环境的依赖缺失、GCC 版本不兼容、OpenSSL 库冲突,心态也容易崩。而且,普通的 Nginx 原生并不支持 “主动健康检查”(Active Health Check),当后端某个节点挂了,Nginx 往往要等到请求报错才能发现,导致用户体验受损。
今天,给大家分享一个生产级的解决方案:
Tengine 一键离线安装脚本(集成主动健康检查模块)
不仅彻底解决离线编译的繁琐,更开启了 Tengine 强大的后端“自愈”能力。
为什么要用 Tengine?
Tengine 是由淘宝发起的 Web 服务器项目。对于需要高可用的业务场景,它比原版 Nginx 多了一个杀手级功能:ngx_http_upstream_check_module。
- Nginx 原生: 被动检查。请求转发过去,报错了才知道节点挂了。
- Tengine: 主动检查。定期发送心跳包探测后端,发现故障自动剔除,恢复后自动上线。
第一步:准备安装包
为了实现完全离线安装,我们需要按特定结构整理好安装包。
安装包:
百度网盘:
通过网盘分享的文件:install-tengine.zip
链接: https://pan.baidu.com/s/1pnUtSzRlA7XUZS8m1MjSFw?pwd=8888 提取码: 8888 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v9的分享
备用下载地址:
https://pan.alianga.com/s/48sO
提取码:alianga.com
脚本预设的目录结构如下:
/root/tengine-install/ # 你的工作目录
├── install-nginx.sh # 一键安装脚本
├── tengine-3.1.0.tar.gz # 主程序包
└── plugins/ # 依赖插件目录
├── openssl-1.1.1v.tar.gz # 必须是 1.1.1v (脚本指定)
├── pcre-8.42.tar.gz
└── zlib-1.2.11.tar.gz
提示:脚本会自动解压
plugins目录下的所有.tar.gz文件,请确保文件名与脚本中定义的版本变量一致。
第二步:一键安装脚本(核心脚本)
这是根据 Tengine 3.1.0 优化的脚本。它会自动编译 PCRE、OpenSSL (1.1.1v)、Zlib,并集成 ngx_http_upstream_check_module 模块。
新建文件 install-nginx.sh,粘贴以下内容:
#!/usr/bin/env bash
# ==================================================
# Tengine 3.1.0 Offline Installer
# ==================================================
# --- 1. 配置区域 ---
# Nginx 安装路径,根据实际要求进行修改
nginx_install_path=/opt/tengine
# 脚本及源码包所在路径
set_up_home=`pwd`
nginx_name=tengine-3.1.0
# --- 2. 准备工作 ---
echo -e "\033[32m[+] 开始解压 Tengine 主程序...\033[0m"
tar -zxvf "$nginx_name".tar.gz
echo -e "\033[32m[+] 准备依赖包...\033[0m"
cd $nginx_name
# 将外部 plugins 目录拷贝到解压后的 tengine 目录中
cp -a "$set_up_home/plugins" .
# 解压所有插件
cd plugins
ls *.tar.gz | xargs -n1 tar xzvf
# --- 3. 编译安装 PCRE ---
cd pcre-8.42
echo -e "\033[32m[+] 开始编译 pcre-8.42 ...\033[0m"
./configure
echo -e "install pcre complete !"
sleep 1s
cd ..
# --- 4. 编译安装 OpenSSL ---
# 指定 OpenSSL 版本
openssl_dir=openssl-1.1.1v
cd "$openssl_dir"
echo -e "\033[32m[+] 开始配置 openssl ($openssl_dir) ...\033[0m"
./config shared zlib
make depend
echo -e "install openssl complete!"
sleep 1s
cd ..
# --- 5. 编译安装 Zlib ---
echo -e "\033[32m[+] 开始配置 zlib-1.2.11 ...\033[0m"
cd zlib-1.2.11
./configure
echo "install zlib complete!"
sleep 1s
cd ..
# --- 6. 编译安装 Tengine ---
# 返回源码根目录
cd $set_up_home/$nginx_name
echo -e "\033[32m[+] 开始编译安装 Tengine (集成健康检查模块) ...\033[0m"
./configure \
--prefix=$nginx_install_path \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre=$set_up_home/$nginx_name/plugins/pcre-8.42 \
--with-openssl=$set_up_home/$nginx_name/plugins/$openssl_dir \
--with-zlib=$set_up_home/$nginx_name/plugins/zlib-1.2.11 \
--add-module=$set_up_home/$nginx_name/modules/ngx_http_upstream_check_module \
--with-ipv6 \
--with-stream \
--with-stream_ssl_module \
--with-compat \
--with-http_auth_request_module \
--with-http_dav_module \
--with-stream_ssl_preread_module
echo "begin to install nginx..."
make && make install
# --- 7. 验证安装 ---
echo -e "\033[32m[SUCCESS] 安装完成!版本信息如下:\033[0m"
$nginx_install_path/sbin/nginx -v
# 软连接(可选,取消注释以启用)
# ln -s $nginx_install_path/sbin/nginx /usr/bin/nginx
执行安装:
chmod +x install-nginx.sh
./install-nginx.sh
如果看到类似下面的输出,恭喜你,安装成功!🎉
install complete! the nginx version is:
Tengine version: Tengine/3.1.0
nginx version: nginx/1.24.0
第三步:配置“主动健康检查”
Tengine 相比 Nginx 原生版,最大的优势之一就是自带 ngx_http_upstream_check_module。
它不像 Nginx 那样“撞了南墙才知道回头”(请求失败才切换),而是定期主动发送心跳包去问后端:“兄弟,你还活着吗?”
1. 修改 nginx.conf
编辑配置文件 /opt/tengine/conf/nginx.conf:
http {
# ... 其他配置 ...
# 定义后端服务器组
upstream my_backend_pool {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80;
# 【核心配置】主动健康检查
# interval=3000: 每3秒检测一次 (生产环境建议 3000-5000)
# rise=2: 成功2次视为节点复活
# fall=3: 失败3次视为节点宕机 (用户配置为5亦可)
# timeout=1000: 超时时间1秒
check interval=3000 rise=2 fall=3 timeout=1000 type=http;
# 发送的心跳包内容
# 建议后端提供一个轻量级接口 /health_status
check_http_send "GET /health_status HTTP/1.0\r\n\r\n";
# 只要返回 2xx 或 3xx 都算活着
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
location / {
proxy_pass http://my_backend_pool;
}
}
# 【可视化】配置健康状态监控页面
server {
listen 8080;
location /check_status {
check_status; # 启用模块
access_log off; # 不记录日志
allow 192.168.1.0/24; # 务必限制内网访问
deny all;
}
}
}
2. 验证效果
重载配置后:
/opt/tengine/sbin/nginx -s reload
访问 http://你的IP:8080/check_status,你将看到一个清晰的 HTML 表格:
| Index | Upstream | Name | Status | Rise counts | Fall counts |
|---|---|---|---|---|---|
| 0 | my_backend_pool | 192.168.1.101:80 | up | 39 | 0 |
| 1 | my_backend_pool | 192.168.1.102:80 | down | 0 | 5 |
- Status: 显示
up代表正常,down代表已自动摘除。 - 全程无需人工干预!
进阶技巧:数据格式化 (CSV/JSON)
Tengine 的状态页不仅给人看,还支持给监控系统(如 Zabbix/Prometheus)看。
通过 URL 参数 format,你可以获取不同的数据格式:
1. CSV 格式 (适合脚本处理)
请求:/check_status?format=csv
输出:
0,my_backend_pool,192.168.1.101:80,up,46,0,http,80
2. JSON 格式 (适合对接监控大屏)
请求:/check_status?format=json
输出:
{"servers": {
"total": 1,
"generation": 3,
"server": [
{
"index": 0,
"upstream": "my_backend_pool",
"name": "192.168.1.101:80",
"status": "up",
"rise": 58,
"fall": 0,
"type": "http"
}
]
}}
模拟故障:
停止一台后端服务器的服务(例如 192.168.1.103),等待几秒钟(超过 fall*interval 的时间),再次刷新状态页,你会发现这台服务器的状态变成了 down。此时,Tengine 将不再向这台服务器转发新的请求。
当你重新启动该后端服务,等待几秒钟(超过 rise*interval 的时间),它的状态会恢复为 up。
这才是企业级负载均衡该有的样子!
结语
至此,你已经完成了 Tengine 的离线安装,并成功配置了强大的主动健康检查功能。这套方案能够显著提高你后端服务的可用性和稳定性,实现故障的自动摘除与恢复。记得在后端应用中实现一个轻量级的 /health_status 接口,以便 Tengine 进行准确的健康探测。
更多主动健康检查参数,可参考官方文档:
https://tengine.taobao.org/document/http_upstream_check.html
虽然 Nginx 官方版也在不断迭代,但在国内复杂的内网环境和对高可用严苛的要求下,Tengine 依然是不可多得的神器。
如果你觉得这个脚本有用,请点个“在看”或转发给你的运维/开发朋友,拯救他们的发际线!
Q.E.D.


