Ubuntu21编译安装tengine

2022-08-30 12:11:20 浏览数 (1)

前言

服务器内部署了很多容器业务,但是许多业务都是需要用80端口对外发布的,会端口占用无法正常运行。 所以决定使用nginx去反向代理对应服务,这样,就可以用80端口发布多个业务。业务容器映射至不同端口上,实现业务需求

为什么选择tengine

tengine是淘宝团队基于nginx二次开发的web服务器项目,针对大访问量网站的需求,添加了很多高级功能和特性

tengine具备什么特性

  • 继承Nginx-1.18.0的所有特性,兼容Nginx的配置;
  • 支持HTTP的CONNECT方法,可用于正向代理场景;
  • 支持异步OpenSSL,可使用硬件如:QAT进行HTTPS的加速与卸载;
  • 增强相关运维、监控能力,比如异步打印日志及回滚,本地DNS缓存,内存监控等;
  • Stream模块支持server_name指令;
  • 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
  • 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;
  • 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数;
  • 动态脚本语言Lua支持。扩展功能非常高效简单;
  • 支持按指定关键字(域名,url等)收集Tengine运行状态;
  • 组合多个CSS、JavaScript文件的访问请求变成一个请求;
  • 自动去除空白字符和注释从而减小页面的体积
  • 自动根据CPU数目设置进程个数和绑定CPU亲缘性;
  • 监控系统的负载和资源占用从而对系统进行保护;
  • 显示对运维人员更友好的出错信息,便于定位出错机器;
  • 更强大的防攻击(访问速度限制)模块;
  • 更方便的命令行参数,如列出编译的模块列表、支持的指令等;
  • 支持Dubbo协议;
  • 可以根据访问文件类型设置过期时间; ...

上手安装tengine

1. 环境介绍:

服务器系统版本

内核版本

服务器厂商

Ubuntu21.10

5.13.0-28-generic

腾讯云轻量服务器

2. 下载源码包

下载tengine 下载pcre

3. 解压源码包
代码语言:javascript复制
tar xf tengine-2.3.3.tar.gz
tar xf pcre-8.37.tar.gz
4. 编译pcre
代码语言:javascript复制
cd  pcre-8.37
./configure
# 报错缺少 C 编译环境
apt update
apt install g   -y
# 重新编译
./configure
make && make install
cd ~
5. 编译安装tengine
代码语言:javascript复制
cd tengine-2.3.3/
./configure  --prefix=/usr/local/tengine 
        --sbin-path=/usr/sbin/nginx 
        --modules-path=/usr/lib/tengine/modules 
        --conf-path=/usr/local/tengine/conf/nginx.conf 
        --error-log-path=/var/log/tengine/error.log 
        --http-log-path=/var/log/tengine/access.log 
        --pid-path=/var/run/nginx.pid 
        --lock-path=/var/run/nginx.lock 
        --http-client-body-temp-path=/var/cache/nginx/client_temp 
        --http-proxy-temp-path=/var/cache/nginx/proxy_temp 
        --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 
        --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp 
        --http-scgi-temp-path=/var/cache/nginx/scgi_temp 
        --user=root  
        --group=root  
        --with-http_ssl_module 
        --with-http_realip_module 
        --with-http_addition_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_random_index_module 
        --with-http_secure_link_module 
        --with-http_stub_status_module 
        --with-http_auth_request_module 
        --with-http_xslt_module=dynamic 
        --with-http_image_filter_module=dynamic 
        --with-http_geoip_module=dynamic 
        --with-threads 
        --with-stream 
        --with-stream_ssl_module 
        --with-stream_ssl_preread_module 
        --with-stream_realip_module 
        --with-stream_geoip_module=dynamic 
        --with-http_slice_module 
        --with-mail 
        --with-mail_ssl_module 
        --with-compat 
        --with-http_v2_module 
        --add-module=modules/ngx_http_upstream_check_module 
        --add-module=modules/ngx_http_upstream_session_sticky_module 
	--with-openssl=/usr/local/openssl
# 报错找不到openssl环境,编译一下openssl
 wget https://mirrors.cloud.tencent.com/openssl/source/openssl-1.1.1m.tar.gz
tar xf openssl-1.1.1m.tar.gz 
cd openssl-1.1.1m/
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl no-ssl2
make && make install
cat << eof >> /etc/profile.d/openssl.sh
export PATH=/usr/local/openssl/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/openssl/lib
export LC_ALL="en_US.UTF-8"
export LDFLAGS="-L/usr/local/openssl/lib -Wl,-rpath,/usr/local/openssl/lib"
eof
source /etc/profile.d/openssl.sh
# 继续编译tengine,再次报错,缺失zlib库
apt install zlib1g-dev -y
# 报错缺失libxml2/libxslt
apt install libxslt1-dev libxml2-dev -y
# 报错缺失gd库
apt install libgd-dev -y
# 报错缺失 geoip 库
apt install libgeoip-dev -y
# 接下来没有报错了,configure完成后,继续安装
make && make install 
# 编译报错,make[1]: *** [objs/Makefile:1987: /usr/local/openssl/.openssl/include/openssl/ssl.h] Error 127
# 修改编辑配置文件
vim auto/lib/openssl/conf

CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
# 修改为
CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"
# 重新编译安装一遍,安装就完成了
6. 检查tengine是否可用了
代码语言:javascript复制
nginx  -t
# 报错,/var/cache/nginx/client_temp 不存在,手动创建一下目录
mkdir -p /var/cache/nginx/

大功告成

编译过程中遇到许多依赖缺失,Ubuntu系统与centos不一样,centos下可以直接安装缺失依赖,Ubuntu下依赖包名字是不同的,如gcc-c ,centos可以直接安装,Ubuntu需要安装g 。 后续可以配置tengine,将业务反向代理出去,统一使用80端口发布,用域名区分业务。

0 人点赞