Tengine可无缝替代Nginx,但需先停用并彻底清理原有Nginx服务、显式编译启用所需模块(如SSL、状态页等)、创建必要目录并配置权限,再通过-t测试后启动。

直接上结论:Tengine 可以无缝替代 Nginx,但必须先停掉原有 nginx 进程、清空冲突端口(通常是 80/443),且编译时要显式启用你依赖的模块——它不默认包含所有 Nginx 模块。
停用并清理旧 Nginx 服务
不清理干净会导致启动失败或端口被占。常见错误是执行 ./sbin/nginx 后提示 address already in use 或进程僵死。
- 查当前 web 服务:
sudo netstat -tulnp | grep ':80\|:443',确认 PID 是否属于nginx - 停止原服务:
sudo nginx -s stop(如果路径在/usr/sbin/nginx)或sudo systemctl stop nginx - 强制杀残留:
sudo pkill -f nginx,再检查ps aux | grep nginx确保无 master/work 进程 - 卸载系统包(可选但推荐):
sudo yum remove nginx或sudo apt purge nginx*,避免配置文件和二进制冲突
编译时必须指定的关键模块
Tengine 默认不启用 SSL、状态页、真实 IP 解析等常用功能,漏配会导致配置加载失败或功能缺失。比如启用 HTTPS 却没加 --with-http_ssl_module,启动时会报错 unknown directive "ssl"。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 最低可用组合(适配大多数场景):
--with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module - 若需反向代理健康检查,必须加:
--add-module=modules/ngx_http_upstream_check_module - 若用
gzip_static提供预压缩文件,补上:--with-http_gzip_static_module -
--prefix路径建议避开/usr/local/nginx(易与旧 Nginx 冲突),改用/opt/tengine或/usr/local/tengine
启动前必做:临时目录与权限检查
启动失败常因路径不存在或权限不足,错误日志里典型提示是 mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory) 或 open() "/var/log/nginx/error.log" failed (13: Permission denied)。
- 手动创建 client body 临时目录:
sudo mkdir -p /var/tmp/nginx/client/ - 确保日志目录存在且可写:
sudo mkdir -p /var/log/nginx && sudo chown nobody:nobody /var/log/nginx - 若用非 root 用户运行(如
nobody),确认该用户对--prefix目录有读取权限,尤其conf/和html/ - 首次启动建议加
-t测试配置:sudo /opt/tengine/sbin/nginx -t,比直接启动更早暴露语法问题
防火墙与云厂商安全组别漏掉
本地 curl localhost 成功但外网打不开,90% 是这个原因。Tengine 启动后默认监听 0.0.0.0:80,但系统或云平台可能拦截。
- CentOS 7+ 检查 firewalld:
sudo firewall-cmd --list-ports,缺 80 就加:sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --reload - 阿里云/腾讯云等必须登录控制台,在「安全组」规则里放行 TCP 80 和 443 端口,源地址设为
0.0.0.0/0(或按需限制) - 启动后验证监听:
sudo ss -tlnp | grep ':80',输出应含nginx进程名,而非systemd或其他
最易被忽略的是模块路径和用户权限的耦合——比如加了 ngx_http_sysguard_module 却没在配置里启用 sysguard 指令,或指定了 user nobody; 但 /var/tmp/nginx 所属用户不是 nobody。这类问题不会报错,但功能静默失效。

















