第一步,准备材料:
- nginx1.9.5+版本,我使用的版本是1.10.2
http2.0在主流浏览器上面都必须是 http2 over TLS(传输层安全协议). 而http2的协商机制是需要在TLS协商完成,建立起来安全连接后完成协商的,所以需要通过TLS的扩展(ALPN)完成协商.而只有在openssl1.0.2+后才会支持ALPN.SO...
具体的HTTP2的协商问题可以查看QUQU的这篇文章.[1]
- 需要一个openssl/或者LibreSSL(如果你的机器上面的额openssl是1.0.2+版本的话应该没问题.否则需要单独一个openssl然后通过编译过程中指定来用这个新的.
openssl1.0.2j
Libressl2.5.0
TLS也同样意味着你需要证书来实现你的HTTPS化.
- 需要给你的域名申请证书.可以在这里申请.
申请验证通过后需要再合并certificate.crt和ca_bundle.crt.
cat a b >c. 注意打开看一下 ,注意先后顺序.里面有个折行的地方需要手动改一下.
开始部署
搞个文件,写一下nginx需要的各种配置,下面是我的配置文件.因为默认目录装着老版本的nginx.所以重新改了目录.
--prefix=/etc/nginx110 \
--conf-path=/etc/nginx110/nginx.conf \
--error-log-path=/var/log/nginx110/error.log \
--http-log-path=/var/log/nginx110/access.log \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--http-client-body-temp-path=/var/lib/nginx/clientbody \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--lock-path=/var/lock/nginx110.lock \
--pid-path=/var/run/nginx110.pid \
--with-pcre \
--with-openssl=../libressl \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_dav_module \
--with-http_stub_status_module \
PS:如果少什么东西,就自己装一下,教程基本网上都有.
PCRE安装 $ sudo apt-get install libpcre3 libpcre3-dev
然后就是MAKE的过程了 慢慢等就好.应该不会很久.
$ sudo ./configure 把那坨配置贴在这里
$ sudo make && make install
第三部,配置你的主机
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
include /etc/nginx110/vhosts/*.online;
}
然后搞一个server出来 ,放在vhosts下面.就可以了
server {
listen 443 ssl http2;
server_name node.ohweb.cn;
ssl_certificate 合并后的证书cert.pem;
ssl_certificate_key 你证书的KEY .cert.key;
gzip on;
access_log logs/access.log main;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location / {
root html;
index index.html index.htm;
}
}
然后启动.访问.其余的事情就不再写了.先到这里.
https://imququ.com/post/protocol-negotiation-in-http2.html ↩︎