天天看點

Centos6 Tengine開啟http2傳輸協定

1.前言

最近在優化網站的通路速度,為網站開啟http2協定,這個協定有什麼優點呢?如下:

  • http2是下一代的傳輸協定,以後都會普遍用它,是一個趨勢。
  • http2有多路複用特性,意思是通路一個域名下面的資源,多個請求共用一條TCP鍊路,是以比http1.1要快得多。

2.準備工作

  • 需要重新編譯openssl1.0.2以上版本,因為我們系統的版本都是centos6的,不支援直接yum更新openssl,如果是centos7,直接yum update openssl -y 即可更新
  • 編譯完成openssl後,需要重新使用openssl的庫檔案重新編譯tengine,我們使用的Tengine版本是Tengine/2.2.2。

3.操作步驟

  • 安裝 openssl-1.0.2t
#進入/usr/local/src,一般軟體包都放這裡
cd /usr/local/src
#下載下傳安裝包
wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz

tar -zxvf openssl-1.0.2t.tar.gz

cd openssl-1.0.2t

./config shared zlib
#預設安裝找/usr/local/ssl
make && make install 
#先備份之前的老版本
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
#建立軟連接配接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
#把動态庫加入系統配置路徑
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
#檢視動态庫是否生效
ldconfig -p
#檢查openssl版本
openssl version           
  • 安裝Tengine
cd /usr/local/src

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

tar tengine-2.2.2.tar.gz

cd tengine-2.2.2
#這裡需要修改一下tengine的代碼,因為我們是手動編譯的openssl,依賴庫路徑和原來系統安裝的不太一樣,是以需要手動指定
vim auto/lib/openssl/conf
#在大概32行配置原來配置如下:
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"

#先安裝一些依賴(我是更新,其實不需要安裝依賴了,如果是首次安裝tengine,就需要安裝依賴)
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel   gcc gcc-c++ autoconf automake jemalloc jemalloc-devel
#開始編譯tengine
cd /usr/local/src/tengine-2.2.2  && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_concat_module --with-jemalloc --with-http_v2_module --with-http_secure_link_module --with-openssl=/usr/local/ssl
make
##注意,如果是第一安裝tegninx,隻需要隻需執行以下指令
make install
#但是我是安裝過了,是以需要備份老的tengine
cp -af /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak
cp -af /usr/local/nginx/sbin/dso_tool /usr/local/nginx/sbin/dso_tool_bak
#拷貝編譯好的tengine到對應目錄
cp /usr/local/src/tengine-2.2.2/objs/nginx /usr/local/nginx/sbin/
cp /usr/local/src/tengine-2.2.2/objs/dso_tool /usr/local/nginx/sbin/
#然後重新開機tengine,就算編譯安裝完成啦           
  • tengine http2配置
#配置http2很簡單,如下:
server {
    #http 不支援http2的傳輸協定,是以80端口不變
    listen 80
    # listen在原https配置檔案基礎上添加http2
    listen 443 ssl http2;
    server_name www.oneq.work;
    .....
}

#另外附上一份完整的支援http2的tengine配置

upstream server_backend {

    server ip:80 weight=10;

    server ip:80 weight=10;    

    keepalive 800;
#下面檢測端口的配置需要tengine的才有效,不是tengine需要安裝額外的插件或者直接注釋即可    

    check interval=5000 rise=3 fall=3 timeout=5000 type=tcp;
}

server {
    listen       80;
    listen       443 ssl http2;
    server_name   xxx.xxx.xxx;

    req_status server;

    ssl_certificate      /usr/local/nginx/certs/xxx.xxx.xxx.crt;
    ssl_certificate_key  /usr/local/nginx/certs/xxx.xxx.xxx.key;
    ssl_session_timeout  5m;
    ssl_protocols   TLSv1.1 TLSv1.2 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass_header User-Agent;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_set_header Connection "";
    proxy_http_version 1.1;
    access_log  logs/access.log  main;

location / {
 proxy_pass http://server_backend/;
 access_log logs/server_backend.log main;
 }

error_page 404 /404.html;
    location = /404.html {
        root html;
    }

error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }
}           

4.效果展示

Centos6 Tengine開啟http2傳輸協定

5.總結

1.第一次安裝tengine和更新步驟有所差別,需要注意下

2.http不支援http2的傳輸協定,是以80端口還是使用http1.1的協定,https使用http2的傳輸協定

繼續閱讀