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依賴庫的解決辦法

  • 常見的web中間件請求返回狀態碼

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