1. 程式人生 > >Nginx開啟TLS SNI support

Nginx開啟TLS SNI support

之前因為想讓VPS上的多個站點都使用SSL加密,主要那些twitter api被牆怕了,還是加密好

但是看一個ip只能一個ssl證書,我不可能去多買幾個ip吧,畢竟只是自己想玩玩,不是那種必須的

但是既然想了就折騰下,後來查了下資料,可以multiple SSL sites on a single IP address

而Nginx如果開啟了TLS SNI support,就能支援多個SSL加密站點共同使用一個IP

方法也很簡單,首先先看看你現在的Nginx是否enable了這個功能

nginx的原始碼地址:/usr/local/src

/usr/local/nginx/sbin/nginx -V
nginx: nginx version: nginx/1.1.0
nginx: TLS SNI support disable
nginx: configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6

如果是TLS SNI support disable那你需要重新編譯下Nginx,如果enable了,你直接修改配置檔案就行  這裡的環境事先說明,這裡使用LNMP一鍵安裝包搭建的環境,其他方法的請自行檢視需要修改地方

方法很簡單,首先安裝OpenSSL,不過一般都裝好的,這裡忽略

下載openssl原始碼包

wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz
tar xvf openssl-1.0.0d.tar.gz

然後重新編譯Nginx,需要在Configuare裡多加一行引數,指明openssl的路徑

我的openssl解壓路徑和nginx的目錄在同級目錄下,如果你的不在請自行修改

./configure --user=www --group=www --prefix=/usr/local/nginx \
        --with-http_stub_status_module \
        --with-http_ssl_module \
        --with-http_gzip_static_module \
        --with-ipv6 \
        --with-openssl=../../openssl-1.0.0d/
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cp objs/nginx /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -t
make upgrade

然後我們看下Nginx版本資訊,確認下 

/usr/local/nginx/sbin/nginx -V nginx: nginx version: nginx/1.1.0 nginx: TLS SNI support enabled nginx: configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-openssl=../../openssl-1.0.0d/

搞定,TLS SNI support enabled,接下來就是修改vhost的配置,加上SSL證書配置了

nginx的ssl配置方法這裡不寫了,有空單獨寫一篇文章說明