Nginx 重新安装 && 优化之 开启 HTTP2.0
http2.0 较之 http1.1 增加了很多内容,新特性主要有以下 4 个,使用 http2.0 可以极大的加快我们网站的访问速度,使用 http2 的话 nginx 必须使用 https,本机上的 nginx 版本还是 1.14,顺便把 nginx 也升级一下!
1.多路复用,无需多个 TCP 连接,因为其允许在单一的 HTTP2 连接上发起多重请求,因此可以不用依赖建立多个 TCP 连接。
2.二进制分帧,将所有要传输的消息采用二进制编码,并且会将信息分割为更小的消息块。
3.头部压缩,用 HPACK 技术压缩头部,减小报文大小
4.服务端推送,服务端可以在客户端发起请求前发送数据,换句话说,服务端可以对客户端的一个请求发送多个相应,并且资源可以正常缓存。
http2 相关内容请查阅以下博客
http2.0 详解
安装 nginx1.19.6
首先下载 nginx 源码
wget http://nginx.org/download/nginx-1.19.6.tar.gz && tar zxvf nginx-1.19.6.tar.gz cd nginx-1.19.6
安装必要的软件
yum -y install gd-devel GeoIP GeoIP-devel GeoIP-data gperftools zlib zlib-devel pcre pcre-devel openssl openssl-devel gcc gcc-c++ automake autoconf libtool libevent libevent-devel libxslt-devel libxml2 libxml2-dev perl-devel perl-ExtUtils-Embed
编译
在这里就把所有能装的扩展都一次性编译进去
./configure \ --prefix=/usr/local/nginx \ --user=www \ --group=www \ --with-threads \ --with-file-aio \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_xslt_module \ --with-http_image_filter_module \ --with-http_geoip_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_auth_request_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_slice_module \ --with-http_degradation_module \ --with-http_stub_status_module \ --with-http_perl_module \ --with-mail \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-google_perftools_module \ --with-openssl=/root/source/openssl-1.1.1i \ --with-pcre=/root/source/pcre-8.42 \ --with-debug
显示如下内容
Configuration summary + using threads + using PCRE library: /home/source/pcre-8.42 + using OpenSSL library: /home/source/openssl-1.1.1i + using system zlib library nginx path prefix: "/usr/local/nginx1.9" nginx binary file: "/usr/local/nginx1.9/sbin/nginx" nginx modules path: "/usr/local/nginx1.9/modules" nginx configuration prefix: "/usr/local/nginx1.9/conf" nginx configuration file: "/usr/local/nginx1.9/conf/nginx.conf" nginx pid file: "/usr/local/nginx1.9/logs/nginx.pid" nginx error log file: "/usr/local/nginx1.9/logs/error.log" nginx http access log file: "/usr/local/nginx1.9/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
make -j && make install
接下来配置一个 ssl (申请证书等在这就不展示了)
nginx server 关于 ssl 的配置如下:
listen 80; listen 443 ssl http2; ssl on; server_name www.aplus.pub; ssl_certificate cert/www.aplus.pub.full_chain.pem; ssl_certificate_key cert/www.aplus.pub.private.key; ssl_session_timeout 10m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;
如何查看一个网站是否采用了 http2
在该网站下进入 chrome 的 console 输入如下代码
(function(){ // 保证这个方法只在支持 loadTimes 的 chrome 浏览器下执行 if(window.chrome && typeof chrome.loadTimes === 'function') { var loadTimes = window.chrome.loadTimes(); var spdy = loadTimes.wasFetchedViaSpdy; var info = loadTimes.npnNegotiatedProtocol || loadTimes.connectionInfo; // 就以 「h2」作为判断标识 if(spdy && /^h2/i.test(info)) { return console.info('本站点使用了 HTTP/2'); } } console.warn('本站点没有使用 HTTP/2'); })();
OK,至此 本站已经采用 http2 进行服务了.