Debian系統讓Tengine支持http2

字號+ 編輯: Snake 修訂: 种花家 來源: 2025-04-19 我要說兩句(1)

現在的Tengine3.0.0版本已經支持http3, 文档留著給2.4.1版本的tengine包使用者備查。

如果环境里已经有编译好的tengine/nginx了, 注意备份,尤其是conf文件

安装过程

首先在shell里用apt工具安装一下依赖包, libssl-dev是openssl开发库, 或者你可以手动编译libressl来替代openssl

apt-get update && apt-get install libssl-dev wget make gcc libpcre3-dev zlib1g-dev

在官网上下载tengine的安装包, 最新的安装包在github和官网都有下载

wget http://tengine.taobao.org/download/tengine-2.4.1.tar.gz

下载了之后解包

tar zxvf tengine-2.4.1.tar.gz

进入tengine目录

cd tengine-2.4.1

这里需要修改一下tengine自动安装脚本里的依赖库路径, 否则极有可能报错

修改哪个文件呢? 注意此时你应该在tengine-2.4.1的安装包路径下

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"

把中间的.openssl全干了, 通常可以改成以下两个版本的配置:

版本一:

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"

版本二:

CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/x86_64-linux-gnu/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/x86_64-linux-gnu/libcrypto.a"

最后一行需要注意, debian/ubuntu通过apt install命令安装openssl的开发库, 会放到/usr/include路径下, 一般都是版本二, 如果路径不对, 提示各种找不到文件, 那么你需要重新编辑auto/lib/openssl/conf文件一个一个find手动去找, 并且指定好这些位置, 同时在configure的--with-openssl=后面的参数中填入正确的路径变量

OK...

开始配置, 这里笔者发现--with-http_concat_module在debian下报错的, 所以先把这段指令给抹掉了, 也没有安装jemalloc, 所以命令长这样:

./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_v2_module \
--with-http_secure_link_module \
--with-openssl=/usr

如果你不想安装libssl-dev这个包, 也实在忘了openssl到底在哪里了(通常openssl里面会自带开发源码), 运行

whereis openssl && which openssl
# 或者
find /usr -name "libssl.a"

之后make一手

make -j$(nproc) && make install

1f24d5cddcd4b50ba284d090b875eb6d.jpeg

完结, 撒花?并没有,接下来你需要配置一手http2。网上一大堆配置方案,这里只说最简单的。http2需要你网站有SSL证书, 别听外头忽悠, 买什么收费证书, 免费的证书他不香吗? 绑定完了免费SSL证书之后, 要在监听端口后边追加一个http2尾缀, 就像这样:

server {
    listen 80;
    listen 443 ssl http2; # 就看这一行
    server_name wwooo.com www.wwooo.com;

然后保存配置, 重读一遍nginx。完结撒花。

释放不必要的编译工具

如果你经常需要升级和编译, 请忽略此段。如果你不想让编译工具包和文档占据太大的空间,可以清理掉, 命令为

apt autoremove gcc make wget libpcre3-dev libssl-dev zlib1g-dev

附一篇文章, 手动编译openssl

https://www.wkwkk.com/articles/ba416b8616aebff6.html

开启http2之后报错net::ERR_HTTP2_PROTOCOL_ERROR

通过报错日志是很难看到问题的关键的。首先请把配置指向到一个默认的后端程序, 或者把网站指向一个纯粹的静态文件, 如index.html

如果正常了, 证明不是nginx配置的问题, 就得检查后端程序了。

一些程序员会到处爬博客,copy网上的header配置, 为header手动赋值, 搞出一些不标准的。首先返回到http1.1的模式下, 让网站正常运行, 通过网站的response header观察都加入了哪些头部参数。挨个在后端程序里面找对应的值,是不是和网上的标准定义有差别,看看多写了还是少写了。浏览器在http2.0版本对response header的要求非常严格, http1.1能忍的, http2忍不了。实在嫌麻烦就先把后端手工定义的header删掉, 再启动http2看看是不是header手工定义的问题。

查出来之后优化掉对应的后端程序段。

閲完此文,您的感想如何?
  • 有用

    7

  • 沒用

    0

  • 開心

    1

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • 防止退出linux終耑退出之後導致的nohup進程強制退出

  • Linux系統下word文档轉成pdf的辦法

  • ubuntu和debian安裝nginx或者tengine報錯, 找不到pcre依賴庫的解決辦法

  • linux終耑下借助awk命令查詢篩出網站access.log日志裡的統計信息

我要說說
網上賓友點評
1 樓 IP 222.168.***.253 的嘉賓 说道 : 很久前
这个版本用了很久了