免费给你的网站加上蓝色小闪电

3

首先,你需要有一张SSL证书。如果没钱,可以免费申请一个,请参考我的另一篇文章《letsencrypt在nginx下的配置》;

然后,如果你的nginx版本过低,需要升级到nginx 1.9.5以上。在Cent OS上这样做:

  • 创建一个文件/etc/yum.repos.d/nginx.repo

  • 输入以下内容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
  • 执行yum update nginx,基本上这时可以顺利升级你的nginx到最高版本;

  • 因为刚升级完nginx,它会把旧的conf文件改名为xxx.conf.rpmsave,所以别忘了把conf文件弄回来:

# mv /etc/nginx/conf.d/virtual.conf.rpmsave /etc/nginx/conf.d/virtual.conf
# mv /etc/nginx/conf.d/ssl.conf.rpmsave /etc/nginx/conf.d/ssl.conf
  • 修改ssl.conf,把原来的listen 443;改成listen 443 ssl http2;

  • 重启nginx: service nginx restart

就是这么简单。但是我怎么知道怎么证明我的网站确实使用了http2呢?

这时候你需要在你的Chrome里安装一个扩展程序叫做“HTTP/2 and SPDY indicator”,它会负责检查你的每个标签页,如果你的网站采用了http2,那么右上角会出现一个蓝色小闪电,如果你的网站采用了低一下级别的SPDY,会出现一个绿色小闪电,如果什么也没采用,那么就是一个灰色的小闪电。

仔细检查了一下,发现Google的网站几乎全部都有蓝色小闪电,而国内的网站几乎都没有,而我们的——有了!经实测,速度确实有所提升。

怎么样,快来安装你的蓝色小闪电吧!完全免费的哟!


2016年6月9日更新:
好吧,不幸的事情发生了,从2016年5月30日起,我突然发现我辛辛苦苦做好的蓝色小闪电又消失了,一开始我以为是服务器出了什么问题,但是随后发现连豆瓣的spdy绿色小闪电也没了,深刻怀疑是插件或者浏览器的问题,于是安装了firefox,在firefox里也安装上http/2插件,这时候在firefox里可以看到我们的蓝色小闪电还在,那么只有可能是浏览器的问题。果不其然,在这篇文章里提到Google禁止了所有使用openssl 1.0.1版本的nginx服务器,因为它不支持ALPN。而最要命的是通过yum安装的nginx包里都是用openssl 1.0.1编译的,于是我们只能自己手工编译自己的nginx服务器。

好吧,本着既然折腾就折腾到底的精神,下载安装openssl 1.0.2:

$ wget -c https://www.openssl.org/source/openssl-1.0.2h.tar.gz
$ tar xf openssl-1.0.2h.tar.gz -C /usr/local/
$ cd /usr/local/openssl-1.0.2h
$ ./config
$ make depend
$ make
$ make test
$ make install
$ mv /usr/bin/openssl /usr/bin/openssl_1.0.1e
$ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
$ openssl version
OpenSSL 1.0.2h  3 May 2016

这只是第一步,安装好了openssl,下面我们还要编译安装nginx:

$ wget http://nginx.org/download/nginx-1.11.1.tar.gz
$ tar -zxf nginx-1.11.1.tar.gz
$ cd nginx-1.11.1/
$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=/usr/local/openssl-1.0.2h --user=nginx --group=nginx --with-http_realip_module --with-http_addition_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_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_geoip_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
$ make
$ make install

这以后,你再启动nginx的时候,就不是service了,而必须以命令行方式:

$ cd /usr/local/nginx
$ cp /etc/nginx/nginx.conf conf/
$ service nginx stop
$ /usr/local/nginx/sbin/nginx

以后要停止nginx服务的时候,先看一下nginx的pid是多少:

$ cat /var/run/nginx.pid

然后再温柔地杀死它就可以了:

$ kill -QUIT 12345

好吧,不多说了,具体步骤还是看官方文档

再进浏览器,看,我们的蓝色小闪电又回来了!哼,Google,你难不倒我!


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

chaihongjun · 2017年11月13日

升级openssl到1.1.0的版本。在自己的电脑里有蓝色闪电。在公司的电脑却没有蓝色闪电。这个是什么情况。

回复

0

如果在自己的电脑里已经能看到蓝色闪电了,说明服务器端配置无误。公司电脑可能是客户端配置不同,如果可以的话,可以把自己的笔记本带到公司去看看是否还有蓝色闪电。

张京 作者 · 2017年11月13日
1

@张京 自己笔记本chrome版本和公司的一样都是 62.0.3202.89,只不过自己笔记本是32位的,公司的是64位的。反正觉得挺诡异的。

chaihongjun · 2017年11月14日
载入中...