标题
版本
备注
系统版本
ubuntu 22.10
-
内核版本
5.15.0-45-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
-
Tengine
v3.0.0
-
Tengine 简介 Tengine是一个基于Nginx的高性能Web服务器,由淘宝网发起并开发,旨在为大型网站提供稳定、高性能的服务。它在Nginx的基础上进行了优化和扩展,提供了更多的功能和性能改进。
以下是Tengine的一些关键特性和优势:
高性能 :Tengine在Nginx的基础上进行了性能优化,包括请求处理、负载均衡、反向代理等方面,提高了网站的响应速度和并发处理能力。
稳定性 :Tengine经过了大规模的线上实践和测试,具有良好的稳定性和可靠性,适用于高并发、大流量的网站环境。
内置模块 :Tengine内置了丰富的模块,包括HTTP模块、SSL模块、负载均衡模块、缓存模块等,提供了丰富的功能和灵活性。
动态扩展 :Tengine支持动态加载模块,用户可以根据需要自定义扩展功能,满足不同的业务需求。
安全性 :Tengine实现了一些安全功能,如防止DDoS攻击、防止SQL注入攻击等,保障了网站的安全性和可靠性。
易于配置 :Tengine的配置文件语法与Nginx类似,易于理解和使用,同时提供了丰富的配置选项,满足不同场景的需求。
活跃的社区 :Tengine拥有一个活跃的开发和用户社区,提供了丰富的文档、教程和支持资源,为用户提供了便利。
总的来说,Tengine是一种功能强大、性能优越、稳定可靠的Web服务器,适用于各种规模和类型的网站和应用程序。
Tengine 安装 注意:以下操作都是在 root 用户下执行。且该文章中的安装方式不支持 Lua 脚本
安装前准备
安装必要依赖的包: apt install -y autoconf automake libtool libmaxminddb-dev libxslt1-dev libgd-dev libgeoip-dev libgoogle-perftools-dev libunwind-dev
下载解压:openssl-1.1.1u 从 openssl 官方站点 下载源码包到 /usr/local/src/ 并解压到下载目录 /usr/local/src/
wget -O /usr/local/src/openssl-1.1.1u.tar.gz https://www.openssl.org/source/openssl-1.1.1u.tar.gz tar -zxf /usr/local/src/openssl-1.1.1u.tar.gz -C /usr/local/src/ cd openssl-1.1.1u
下载解压:pcre(非 pcre2) 从 pcre 官方站点 下载源码包到 /usr/local/src/ 并解压到下载目录 /usr/local/src/
wget -O /usr/local/src/pcre-8.45.tar.gz https://udomain.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz tar -zxf /usr/local/src/pcre-8.45.tar.gz -C /usr/local/src/
下载解压:zlib 从 zlib 官方站点 下载源码包到 /usr/local/src/ 并解压到下载目录 /usr/local/src/
wget -O /usr/local/src/zlib-1.2.13.tar.gz https://zlib.net/zlib-1.2.13.tar.gz tar -zxf /usr/local/src/zlib-1.2.13.tar.gz -C /usr/local/src/
下载安装:lua-5.4.6 从 lua 官方站点 下载 lua 的源码包到 /usr/local/src/ 目录下并安装到 /usr/local/lua 目录:
wget -O /usr/local/src/lua-5.4.6.tar.gz http://www.lua.org/ftp/lua-5.4.6.tar.gz tar -zxf /usr/local/src/lua-5.4.6.tar.gz -C /usr/local/src/ cd /usr/local/src/lua-5.4.6/make all test make install INSTALL_TOP=/usr/local/lua
安装 luajit2 及其它 lua 组件 这里的 luajit2、lua-resty-core 以及 lua-resty-lrucache 都安装到同一个目录
下载安装:luajit2 git clone https://github.com/openresty/luajit2.git /usr/local/src/luajit2 cd /usr/local/src/luajit2make install PREFIX=/usr/local/LuaJIT2
下载安装: git clone https://github.com/openresty/lua-resty-core.git /usr/local/src/lua-resty-core cd /usr/local/src/lua-resty-coremake install PREFIX=/usr/local/LuaJIT2
下载安装: git clone https://github.com/openresty/lua-resty-lrucache.git /usr/local/src/lua-resty-lrucache cd /usr/local/src/lua-resty-lrucachemake install PREFIX=/usr/local/LuaJIT2
最后,将 luajit2 模块软链接到 /usr/lib/ 及 /usr/lib64/ 目录:
ln -s /usr/local/LuaJIT2/lib/libluajit-5.1.so.2.1.0 /usr/lib/libluajit-5.1.so.2ln -s /usr/local/LuaJIT2/lib/libluajit-5.1.so.2.1.0 /usr/lib64/libluajit-5.1.so.2
下载安装:jemalloc 从 github 上同步 jemalloc 源码到 /usr/local/src/ 目录下并执行 ./autogen.sh 生成 configure 文件
git clone https://github.com/jemalloc/jemalloc.git /usr/local/src/jemalloc cd !$./autogen.sh
下载安装:libatomic: 从 github 上同步 libatomic_ops 源码到 /usr/local/src/ 目录下并执行 ./autogen.sh 生成 configure 文件
git clone https://github.com/ivmai/libatomic_ops.git /usr/local/src/libatomic_ops cd /usr/local/src/libatomic_ops./autogen.sh ln -s /usr/local/src/libatomic_ops/src/.libs/libatomic_ops.a /usr/local/src/libatomic_ops/src/
下载目录索引模块:ngx-fancyindex 从 github 上同步 ngx-fancyindex 源码到 /usr/local/src/ 目录下
git clone https://github.com/aperezdc/ngx-fancyindex.git /usr/local/src/ngx-fancyindex
下载IP定位模块:ngx_http_geoip2_module 从 github 上同步 ngx_http_geoip2_module 源码到 /usr/local/src/ 目录下
git clone https://github.com/leev/ngx_http_geoip2_module.git /usr/local/src/ngx_http_geoip2_module
Tengine 安装
1.从 tengine 官方站点 下载 tengine 源码包到 /usr/local/src/ 目录下:
wget -O /usr/local/src/tengine-3.0.0.tar.gz http://tengine.taobao.org/download/tengine-3.0.0.tar.gz
2.将下载好的源码包解压到下载目录:
tar -zxf /usr/local/src/tengine-3.0.0.tar.gz -C /usr/local/src/
3.进入解压目录:
cd /usr/local/src/tengine-3.0.0
4.添加运行 tengine 的用户:
useradd -s /sbin/nologin nginx
5.配置编译参数:
./configure \ --prefix=/usr/local/nginx \ --modules-path=/usr/local/nginx/modules \ --pid-path=/usr/local/nginx/logs/nginx.pid \ --error-log-path=/usr/local/nginx/logs/error.log \ --with-poll_module \ --with-threads \ --with-file-aio \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_xslt_module \ --with-http_image_filter_module \ --with-http_geoip_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_auth_request_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_slice_module \ --with-http_stub_status_module \ --with-http_lua_module \ --http-log-path=/usr/local/nginx/logs/access.log \ --http-client-body-temp-path=/usr/local/nginx/body_tmp/ \ --http-proxy-temp-path=/usr/local/nginx/proxy_tmp/ \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_geoip_module \ --with-stream_ssl_preread_module \ --with-stream_sni \ --with-google_perftools_module \ --with-cpp_test_module \ --with-luajit-lib=/usr/local/LuaJIT2/lib \ --with-luajit-inc=/usr/local/LuaJIT2/include/luajit-2.1 \ --with-lua-lib=/usr/local/lua/lib \ --with-lua-inc=/usr/local/lua/include \ --with-pcre=/usr/local/src/pcre-8.45/ \ --with-zlib=/usr/local/src/zlib-1.2.13/ \ --with-openssl=/usr/local/src/openssl-1.1.1u \ --with-jemalloc=/usr/local/src/jemalloc \ --with-libatomic=/usr/local/src/libatomic_ops \ --with-debug \ --without-http_upstream_keepalive_module \ --with-mail=dynamic \ --with-mail_ssl_module \ --add-module=./modules/ngx_backtrace_module \ --add-module=./modules/ngx_http_concat_module \ --add-module=./modules/ngx_http_footer_filter_module \ --add-module=./modules/ngx_http_proxy_connect_module \ --add-module=./modules/ngx_http_reqstat_module \ --add-module=./modules/ngx_http_slice_module \ --add-module=./modules/ngx_http_sysguard_module \ --add-module=./modules/ngx_http_trim_filter_module \ --add-module=./modules/ngx_http_upstream_check_module \ --add-module=./modules/ngx_http_upstream_consistent_hash_module \ --add-module=./modules/ngx_http_upstream_keepalive_module \ --add-module=./modules/ngx_http_upstream_session_sticky_module \ --add-module=./modules/ngx_http_upstream_vnswrr_module \ --add-module=./modules/ngx_http_user_agent_module \ --add-module=./modules/ngx_multi_upstream_module \ --add-dynamic-module=/usr/local/src/ngx_http_geoip2_module \ --add-module=/usr/local/src/ngx-fancyindex
6.编译:
7.安装:
8.将 nginx 可执行文件软链接到 /usr/sbin/ 目录下:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
9.创建 tengine 启动脚本文件 /lib/systemd/system/nginx.service ,内容为:
[Unit] Description=Nginx After=syslog.target network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit LimitNOFILE=65536 [Install] WantedBy=multi-user.target
10.启动 nginx 并设置为开机启动
systemctl enable --now nginx.service
安装过程中的报错: 错误一:nginx -t 报: root@vultr:/usr/local/src/tengine-3.0.0 nginx: [warn] could not build optimal variables_hash, you should increase either variables_hash_max_size: 1024 or variables_hash_bucket_size: 64; ig nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
解决方法:
编辑 nginx 主配置文件,在 http{…} 中添加(注意:不能添加到 server{…}):
variables_hash_max_size 4096; variables_hash_bucket_size 2048;
错误二:无法启动 nginx ,报: 2023/07/26 10:25:01 [alert] 345323 no field package.preload['resty.core' ] no file '../lua-resty-core/lib/resty/core.lua' no file '../lua-resty-lrucache/lib/resty/core.lua' no file './resty/core.lua' no file '/usr/local/share/luajit-2.1.0-beta3/resty/core.lua' no file '/usr/local/share/lua/5.1/resty/core.lua' no file '/usr/local/share/lua/5.1/resty/core/init.lua' no file './resty/core.so' no file '/usr/local/lib/lua/5.1/resty/core.so' no file '/usr/local/lib/lua/5.1/loadall.so' no file './resty.so' no file '/usr/local/lib/lua/5.1/resty.so' no file '/usr/local/lib/lua/5.1/loadall.so' ) in /usr/local/nginx/conf/nginx.conf:137
解决方法:
根据提示,
cp -r /usr/local/LuaJIT2/lib/lua/resty /usr/local/share/luajit-2.1.0-beta3/