编译Tengine报“no PCRE library”或“OpenSSL not found”错误,是因为未安装pcre-devel、openssl-devel等开发包,仅装运行库无法通过configure检测;必须安装对应系统的-devel(RHEL/CentOS)或-dev(Debian/Ubuntu)包才能提供头文件和链接支持。

直接编译安装最稳妥,包管理器装的 tengine 包往往陈旧、模块缺失、路径混乱,生产环境别碰。
为什么 configure 总报错“no PCRE library”或“OpenSSL not found”
这不是源码问题,是系统没装开发头文件。只装 pcre 或 openssl 运行时库不够,必须装带 -devel(RHEL/CentOS)或 -dev(Debian/Ubuntu)后缀的开发包。
-
yum install -y pcre-devel openssl-devel zlib-devel(CentOS 7/8) -
apt-get install -y libpcre3-dev libssl-dev zlib1g-dev(Ubuntu 18.04+) - 漏掉任意一个,
./configure就会静默跳过对应模块(比如--with-http_ssl_module失效),但不报错——你只有启动时遇到unknown directive "ssl"才会发现 - 用
pkg-config --modversion pcre或openssl version -d快速验证是否真装上了头文件和库路径
configure 参数怎么选才不踩坑
默认 --prefix 是 /usr/local/nginx,但 Tengine 官方推荐独立路径,避免和系统 nginx 冲突。实际用这些参数足够覆盖 95% 场景:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
--prefix=/opt/tengine:明确安装根目录,后续所有路径都由此推导 -
--with-http_ssl_module:HTTPS 必开,没它连listen 443 ssl都不认 -
--with-http_v2_module:HTTP/2 提升首屏加载速度,现代浏览器默认走 v2 -
--with-http_realip_module:反向代理时能拿到真实客户端 IP(需配合set_real_ip_from) - 别加
--with-pcre:这是告诉编译器去源码里自带 PCRE,反而容易和系统冲突;直接依赖系统pcre-devel更稳
make install 后找不到 nginx 命令或配置文件
不是安装失败,是路径没搞清。Tengine 不会自动把 sbin/nginx 加进 $PATH,也不会把 conf/nginx.conf 放到 /etc 下。
- 二进制在
/opt/tengine/sbin/nginx,运行前先确认权限:ls -l /opt/tengine/sbin/nginx(应有x) - 主配置文件在
/opt/tengine/conf/nginx.conf,首次编辑前建议备份:cp nginx.conf nginx.conf.bak - 检查配置语法:
/opt/tengine/sbin/nginx -t -c /opt/tengine/conf/nginx.conf(-c显式指定路径,别省) - 启动命令:
/opt/tengine/sbin/nginx,不是nginx(没加 PATH 的话会报 command not found)
启动后访问不了,但 ps 看进程在跑
八成是防火墙或 SELinux 拦的,尤其 CentOS 7/8 默认开 firewalld,且不提示任何日志。
- 查端口监听:
ss -tlnp | grep :80,如果没输出,说明 Tengine 根本没绑成功(配置 listen 错了或被其他进程占了) - 查防火墙:
firewall-cmd --list-ports,没看到80/tcp就加:firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload - SELinux 关闭最省事:
setenforce 0(临时),再改/etc/selinux/config里SELINUX=disabled - 别信 “已启动”,一定要
curl -I http://localhost或telnet localhost 80实测连通性
最易忽略的一点:Tengine 编译完不会自动生成 systemd service 文件,systemctl start tengine 肯定失败。要用就自己写 /etc/systemd/system/tengine.service,否则老实用绝对路径启停。

















