Debian系统让Tengine支持http2

字号+ 编辑: Snake 修订: 种花家 来源: 2023-10-02 我要说两句(1)

现在的Tengine3.0.0版本已经支持http3, 文档留着给2.4.1版本的tengine包使用者备查。

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

安装过程

首先在shell里用apt工具安装一下依赖包, openssl或者手动编译libressl来替代openssl

apt-get install openssl 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.3.3的安装包路径下

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"

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/local/openssl

最后一行需要注意, 有的时候debian通过apt-get工具自动安装的openssl会到/usr/include/openssl路径下, 也许上面的命令根本就没办法make, 提示各种找不到文件, 那么你需要重新编辑auto/lib/openssl/conf文件一个一个指定位置, 同时在configure的--with-openssl=后面的参数中填入正确的路径变量, 例如, 笔者在某台服务器上的配置文件是这样的:

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"

而配置的时候命令长成这样:

./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

如果你实在搞不清楚openssl到底安装到哪里了, 运行

whereis openssl

再插播一段话: 如果你之前安装过nginx到/usr/local/nginx目录下, 最好备份一手, 重命个名之类的。不过你不备份也没关系,反正配置文件丢不了。

之后make一手

make && 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 openssl 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手工定义的问题。

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

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

    6

  • 没用

    0

  • 开心

    1

  • 愤怒

    0

  • 可怜

    0

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • Linux系统下word文档转成pdf的办法

  • ubuntu和debian安装nginx或者tengine报错, 找不到pcre依赖库的解决办法

  • linux终端下借助awk命令查询筛出网站access.log日志里的统计信息

  • 常见的web中间件请求返回状态码

我要说说
网上宾友点评
1 楼 IP 222.168.189.253 的嘉宾 说道 : 1696258346
这个版本用了很久了