前几天说给博客部署 SSL 证书来提高逼格,后来因为自己一个项目的需要,也跟着申请了多了一张 SSL 证书,按照相同的流程部署上去后,发现前面的域名的证书都 load 到了新增加的那张证书。接着 Google 了下,原来是 Nginx 编译的时候没有开启 TLS SNI ,这样就导致了同一 IP 下只能支持一张证书。
查看已安装的 Nginx 是否开启 TLS SNI
1 2 3 4 5
| $ nginx -V ginx version: nginx/1.6.2 built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55) TLS SNI support disabled configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
|
TLS SNI support disabled
即未开启
下载支持 SNI 的 OpenSSL
重新编译 Nginx 需要 OpenSSL,下载并解压到某个目录
1 2 3
| $ cd ~ $ wget http://www.openssl.org/source/openssl-1.0.2a.tar.gz $ tar zxvf openssl-1.0.2a.tar.gz
|
重新编译 Nginx
1 2 3 4 5 6 7 8 9 10
| $ cd nginx-1.6.2 $ ./configure --user=www --group=www \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-openssl=path/to/openssl-1.0.2a $ make $ mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old $ cp objs/nginx /usr/local/nginx/sbin/nginx
|
make 的编译选项加上 --with-openssl=path/to/openssl-1.0.2a
参数指向的是你解压的 OpenSSL 目录,make 编译完成后不要执行 make install ,直接将 objs 目录下编译好的新 nginx 执行文件 copy 到原来的路径下替换即可。
确认已经开启 TLS SNI
1 2 3 4 5
| $ nginx -V ginx version: nginx/1.6.2 built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55) TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_modul --with-openssl=../../openssl-1.0.2a
|
虽然是很简单的一件事,其实我折腾了好久,我一直以为是我 conf 文件哪里写错了,后来误打误撞发现原来是跟没有开启某些相关,希望能帮助大家少走不必要的路。