如果環境裡已經有編譯好的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
完結, 撒花?並沒有,接下來你需要配置一手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手工定義的問題。
查出來之後優化掉對應的後耑程序段。