Windows编译Tengine Web Server心得

本文详细介绍了如何在Windows平台上编译Tengine,一个由淘宝发起的高性能Web服务器,特别针对大访问量网站设计。通过msys2工具和定制配置,作者成功实现了Tengine在Windows的移植,包括安装msys2、配置环境、处理自动配置脚本错误和模块扩展等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P1. Tengine简介

这是Tengine官方网站对该软件的描述:

Tengine是由淘宝发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝,天猫,优酷,全球速卖通,Lazada,阿里云等得到了很好的检验。Tengine将向通用API网关方向持续演进和发展,在HTTP应用流量入口网关的基础上,逐步支持4/7层TLS,TCP,UDP和GRPC多协议路由能力,适配不同终端和不同应用,打造全场景通用网关,持续保持Tengine业界领先地位。

从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于淘宝,蚂蚁,阿里云,搜狗等互联网企业。Tengine是社区合作的成果,我们欢迎大家参与其中,贡献自己的力量。

作为一款十分强大的Web服务器软件,Tengine可以说是nginx的超级加强版。与nginx相比,Tengine更加的稳定,在高并发下有更好的性能表现,因此Tengine更适合大访问量网站的需求。
然而,通过分析源码目录我们便可得知,如此强大的软件,却有一点非常蛋疼——Linux only,即只能在Linux上通过make源代码后再make install。因此,Windows用户基本无缘使用这款神器……吗?

P2. 解决方案

Windows平台上有一神器,唤作msys2

msys2命令行窗口

该工具提供了一个类Linux编译环境及海量工具集,让我们可以方便快捷地在Windows平台上将各种源代码编译为exe二进制可执行文件。
因此,我们可以以此为媒介,将Tengine顺利地移植到Windows平台上。

P3. 理论存在,魔法开始

I. 安装msys2

首先,你需要到各大镜像网站上下载msys2的最新安装包。
你也可以点击这里,从腾讯云的镜像站下载最新版的msys2。
下载完毕后,请参照这篇文章完成安装。
https://blog.csdn.net/ymzhu385/article/details/121449628/
如果你已安装,则可以跳过这一步。

II. 设置编译环境

编译前,请确保你的msys2已经安装了如下套件:
openssl-devel zlib-devel pcre-devel libcrypt-devel gcc msys/make
如果没有安装,请打开msys2终端(开始→MSYS2 64bit→MSYS2 MSYS),依次执行:

pacman -Syu
pacman -S openssl-devel zlib-devel pcre-devel libcrypt-devel gcc msys/make

注意:以上均为编译必须组件,缺失则会导致缺失关键函数报错!!!

在执行第一条命令时,msys2可能会要求退出终端完成更新。输入y完成终端更新后,需要重新打开msys2终端以完成后续操作。

III. 配置项目

以Tengine-2.4.0代码为例。
项目自动配置脚本configure有一点相当鸡肋,msys2在执行configure的时候,会因配置错误而将编译环境识别错误。因此,我们需要定位到39行,找到| MSYS_*

38  case "$NGX_SYSTEM" in
39        MINGW32_* | MINGW64_* | MSYS_*) # ←←←这里
40        NGX_PLATFORM=win32
41        ;;
42  esac

把它删掉!

修改的代码后如下:

38  case "$NGX_SYSTEM" in
39        MINGW32_* | MINGW64_*) # ←←←删除后
40        NGX_PLATFORM=win32
41        ;;
42  esac

Ctrl+S保存文件,退出。

IV.* 配置Tengine modules

如果你只希望使用Tengine的基础功能,请跳过此步骤。

和nginx一样,Tengine也可以通过增加modules来实现功能组件扩展。不过,Tengine的各种modules存放在项目根目录的modules文件夹内。
如希望添加额外扩展组件,请在后续的命令中通过以下参数来添加module。

--add-module=modules/[组件名]

举个栗子:

--add-module=modules/ngx_http_upstream_keepalive_module --without-http_upstream_keepalive_module
# 使用优化过的ngx_http_upstream_keepalive_module需要禁用原有的该组件

但是,部分组件会导致编译错误,我们需要将其从modules目录中移除。
当然,这部分功能也会不可避免地丢失。
以下是会导致编译错误的modules列表(*包括lua和国密扩展,因为没有对应的库):

  • ngx_backtrace_module
  • ngx_debug_pool
  • ngx_debug_timer
  • ngx_http_lua_module
  • ngx_http_tfs_module
  • ngx_openssl_ntls

当然,如果你希望启用全部扩展,请在移除问题组件后使用以下参数:

--add-module=modules/* --without-http_upstream_keepalive_module

V. 创建Makefile配置文件&构建exe

我们可以通过上文提到的configure脚本创建Makefile配置文件。
在msys2终端中cd到项目根目录后,执行:

./configure --builddir=objs --prefix= --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid --http-log-path=logs/access.log --error-log-path=logs/error.log --with-cc-opt="-D FD_SETSIZE=409600" --add-module=modules/* --without-http_upstream_keepalive_module
#最后的--add-module需自行根据需求添加组件,上方示例为启用全部组件

执行完毕后,输入:

make

等待程序完成构建。
构建完成的Tengine程序是/objs/nginx.exe

VI. 使用

  1. 新建一个不含中文的文件夹(整个路径都最好不要有中文),将生成的nginx.exe移动至该文件夹内。
  2. 回到根目录,将conf html docs文件夹复制到上述含有nginx.exe的文件夹内。
  3. nginx.exe应用根目录新建logs文件夹。
  4. 双击nginx.exe运行Tengine,根据报错从[msys2安装目录]/usr/bin/复制缺失的dll到Tengine应用根目录。(可能需要重复几次)
  5. 运行Tengine。
  6. 完成!

最后的Tengine工作目录应该像这样:

完成辣
服务器发出的响应头应该是这样:

响应

如果一样,恭喜你,你已经将Tengine成功移植到了Windows平台上!

小结

这个烂活断断续续的整了两年半(真的),如今终于成功实装了这个项目,我心中百感交集。
其中,不乏收获成功的喜悦,也有见证了自己与软件共同进步的欣慰。
最后,再次感谢各位软件作者们对开源产品的不懈维护和对开源社区的卓著贡献!

自查

  • 是否完成编译环境配置?
  • 是否改正了错误的自动配置脚本?
  • 是否移除了有问题的扩展组件?
  • 是否生成Makefile并完成构建?
  • 是否完成Tengine主程序工作环境配置?
  • 是否成功运行Tengine?

Copyright © 2020-2023 王憨憨同学,根据CC BY-SA 4.0 协议开放共享

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值