HTTP2和SPDY
准备工作
# apt-get install build-essential pkg-config zlib1g-dev libssl-dev libxml2-dev libevent-dev libevent-openssl-2.0-5
# wget 'https://github.com/tatsuhiro-t/spdylay/releases/download/v1.3.2/spdylay-1.3.2.tar.xz'
安装spdylay
# tar xpf spdylay-1.3.2.tar.xz
# cd spdylay-1.3.2
# ./configure
Version: 1.3.2 shared 9:0:2
Host type: x86_64-unknown-linux-gnu
Install prefix: /usr/local
C compiler: gcc
CFLAGS: -g -O2
LDFLAGS:
LIBS: -lz
CPPFLAGS:
C preprocessor: gcc -E
C++ compiler: g++
CXXFLAGS: -g -O2
CXXCPP: g++ -E
Library types: Shared=yes, Static=yes
CUnit: no
OpenSSL: yes
Libxml2: yes
Libevent(SSL): yes
Src: yes
Examples: yes
# make && make install
# ldconfig
ldconfig
让系统重新载入动态链接库。# shrpx
Usage: shrpx [-Dh] [-s|--client|-p] [-b <HOST,PORT>]
[-f <HOST,PORT>] [-n <CORES>] [-c <NUM>] [-L <LEVEL>]
[OPTIONS...] [<PRIVATE_KEY> <CERT>]
A reverse proxy for SPDY/HTTPS.
[FATAL] Too few arguments
(shrpx.cc:1167)
安装nghttp2
# apt-get install libev-dev libjansson-dev libjemalloc-dev python-dev cython
# wget 'https://github.com/tatsuhiro-t/nghttp2/releases/download/v0.7.11/nghttp2-0.7.11.tar.xz'
# tar xpf nghttp2-0.7.11.tar.xz
# cd nghttp2-0.7.11
# ./configure
Version: 0.7.11 shared 13:0:8
Host type: x86_64-unknown-linux-gnu
Install prefix: /usr/local
C compiler: gcc
CFLAGS: -g -O2
WARNCFLAGS:
LDFLAGS:
LIBS:
CPPFLAGS:
C preprocessor: gcc -E
C++ compiler: g++
CXXFLAGS: -g -O2 -std=c++11
CXXCPP: g++ -E
Library types: Shared=yes, Static=yes
Python:
Python: /usr/bin/python
PYTHON_VERSION: 2.7
pyexecdir: ${exec_prefix}/lib/python2.7/dist-packages
Python-dev: yes
PYTHON_CPPFLAGS:-I/usr/include/python2.7
PYTHON_LDFLAGS: -L/usr/lib -lpython2.7
Cython: cython
Test:
CUnit: no
Failmalloc: yes
Libs:
OpenSSL: yes
Libxml2: yes
Libev: yes
Libevent(SSL): yes
Spdylay: yes
Jansson: yes
Jemalloc: yes
Boost CPPFLAGS:
Boost LDFLAGS:
Boost::ASIO:
Boost::System:
Boost::Thread:
Features:
Applications: yes
HPACK tools: yes
Libnghttp2_asio:no
Examples: yes
Python bindings:yes
Threading: yes
# make && make install
# ldconfig
启动nghttpx反向代理
# nghttpx -f *,443 -b localhost,80 /path/to/private.key /path/to/certification.crt
nghttpx -h
阅读帮助资料。- http://dev.chromium.org/spdy/spdy-whitepaper#TOC-Preliminary-results
- http://blogs.msdn.com/b/ieinternals/archive/2013/09/24/internet-explorer-11-changelist-change-log.aspx
- http://blog.chromium.org/2015/02/hello-http2-goodbye-spdy-http-is_9.html
- http://tatsuhiro-t.github.io/spdylay
-----------------
九评HTTP/2协议
1.向下兼容的HTTP API
2.更轻量的HTTP请求
3.针对服务器和传输的优化
4.缓存推送
5.后悔药
6.加密
7.不再是人类语言
8.未必能被有效利用
9.HTTP/3什么的
-----------
Nginx启用SPDY协议
下面来简单介绍下Nginx如何启用SPDY协议。Nginx从1.4.0稳定版开始就已经支持SPDY协议,不过在编译的时候需要增加相应的配置参数,大家如果是使用LNMP脚本来搭建环境的话,建议可以通过直接修改upgrade_nginx.sh文件后重新编译nginx的方式来进行。打开upgrade_nginx.sh后,找到如下代码,并进行修改:
1 2 3 4 5 6 | 修改前 cd nginx-$nginx_version/ ./configure --user=www --group=www --prefix=/wp-content/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 修改后 cd nginx-$nginx_version/ ./configure --user=www --group=www --prefix=/wp-content/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-http_spdy_module |
1 2 3 4 5 6 7 8 | server { listen 443 ssl spdy;//在这里加入spdy,这样即可启用SPDY协议 ssl on; ssl_certificate /wp-content/local/nginx/conf/jayshao.crt; ssl_certificate_key /wp-content/local/nginx/conf/jayshao.key; ... } |
网站启用HTTPS和SPDY
Google开发的SPDY协议(已成为HTTP/2.0的模板)可以很好的克服HTTP/1.1的许多不足。SPDY协议本身可以不使用HTTPS,但是Google的实现(包括apache的mod_spdy和Chrome浏览器)都强制要求SPDY基于HTTPS进行传输,因为SPDY是Google牵的头,大家基本也默认了这一点。SPDY在与服务器通讯过程中只使用一条连接,因此HTTPS的握手过程也只有一次,可以说基本上克服了使用了HTTPS带来的开销。SPDY使用的分帧、首部压缩等技术可以很好的克服HTTP/1.1时代的队首阻塞、首部过大等问题,使HTTP性能得到提升。
目前大多数最新的浏览器都支持SPDY协议,包括IE11、Chrome、Firefox。服务器方面,apache有mod_spdy,nginx的较新版本内置了对SPDY的支持,只需编译时加上--with-http_spdy_module
选项即可。
我使用的版本是nginx 1.62,Ubuntu 14.04的更新源中的nginx版本较低,无法通过简单的配置启用SPDY,所以我加入了nginx的ppa源:add-apt-repository ppa:nginx/stable
,这样再安装nginx就是1.62版本了,配置nginx,将listen 443 ssl
修改为listen 443 ssl spdy
即可,非常简单。
相关帖子:https://briteming.blogspot.com/2015/03/googlespdy.html