让Nginx多个虚拟主机支持SSL

默认情况下Nginx在同一台服务器下,多个虚拟主机只能使用一个SSL证书,如果想支持的话需要在Nginx下开启TLS协议的SNI扩展(Server Name Indication)。可以使用nginx -V命令查看是否支持TLS SNI,如果显示TLS SNI support disabled则需要重新编译nginx。

首先需要编译openssl,因为0.9.x版本的openssl爆出了heart bleed漏洞,因此需要下载编译最新版的openssl,并开启TLS EXT,执行脚本如下:

  1. wget http://www.openssl.org/source/openssl-1.0.1p.tar.gz
  2. tar xzvf openssl-1.0.1p.tar.gz
  3. cd openssl-1.0.1p
  4. ./config enable-tlsext
  5. make && make install

然后下载最新版nginx,在配置的时候加上–with-openssl和–with-openssl-opt参数,脚本如下:

  1. ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-google_perftools_module --with-openssl=/root/downloads/openssl-1.0.1p/ --with-openssl-opt="enable-tlsext"

详细的过程请参考 Linux下源码方式安装Nginx和PHP(FastCGI)

参考资料:
Configuring SNI with NginX
Howto setup Nginx with Server Name Indication TLS Extensions on CentOS 5
nginx 同一个IP上配置多个HTTPS主机
重新编译Nginx指导手册【修复静态编译Openssl的Nginx漏洞 】[Openssl Heartbleed]

发表评论

电子邮件地址不会被公开。 必填项已用*标注