crazy 发表于 2016-12-14 23:06:40

使用Nginx配置单IP下多个SSL主机

Web 服务器启用SSL协议能极大限度减少窃听和挟持,目前越来越多应用都开启了SSL之旅,苹果App Store从2017年开始强制所有APP必须使用SSL连接。
传统的SSL主机,要求每个证书都需要独立ip,还好,Nginx一早就开始支持TLS SNI,OpenSSL从 0.9.8j之后的版本,默认开启了SNI(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书不同的域名)
http://en.wikipedia.org/wiki/Server_Name_Indication
http://nginx.org/en/docs/http/configuring_https_servers.html#sni

支持SNI的客户端
Opera 8.0;
MSIE 7.0 (but only on Windows Vista or higher);
Firefox 2.0 and other browsers using Mozilla Platform rv:1.8.1;
Safari 3.2.1 (Windows version supports SNI on Vista or higher);
and Chrome (Windows version supports SNI on Vista or higher, too).

Nginx从0.5.23.的版本开始支持SNI,只要你的OpenSSL版本也支持SNI,则无需另外设置,默认就能使用SNI来配置单IP多个SSL主机,
要查看你是否支持SNI
nginx -V
如果看到TLS SNI support enabled
则说明你的Nginx已经支持。

nginx SSL虚拟主机示例:


server        {
        listen                        443 ssl http2;
        server_name                magapp.im286.net;
        index                        index.html index.htm index.php;
        root                        /home/www/magapp;
        ssl                        on;
        ssl_certificate                /usr/local/nginx/conf/magapp.crt;
        ssl_certificate_key        /usr/local/nginx/conf/magapp.key;
        ssl_protocols                SSLv3 TLSv1 TLSv1.1 TLSv1.2 SSLv2;
        ssl_ciphers                AES128+EECDH:AES128+EDH:!aNULLi:AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;


        location ~ \.php$ {
                proxy_pass   http://127.0.0.1:81;
                client_max_body_size    20m;
                proxy_redirect    off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

}




关于nginx+apache下的配置的特别说明:
需然大部分人都使用fastcgi方式来跑PHP,但是也有个别是使用nginx+apache的,如果是nginx+apache下部署SNI支持的多SSL主机,apache部分需要注意。
Discuz从X3开始支持SSL,但是Discuz是通过PHP判断URL是否SSL的,使用的是绝对地址,不是相对地址,所以对于Discuz,nginx部署了SSL之后,发送给后端apache处理的php请求也要使用SSL,apache同样需要部署SSL

nginx主机部分配置

server        {
        listen                        443 ssl http2;
        server_name                magapp.im286.net;
        index                        index.html index.htm index.php;
        root                        /home/www/magapp;
        ssl                        on;
        ssl_certificate                /usr/local/nginx/conf/magapp.crt;
        ssl_certificate_key        /usr/local/nginx/conf/magapp.key;
        ssl_protocols                SSLv3 TLSv1 TLSv1.1 TLSv1.2 SSLv2;
        ssl_ciphers                AES128+EECDH:AES128+EDH:!aNULLi:AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;


        location ~ \.php$ {
                proxy_pass   https://127.0.0.1:82;
                client_max_body_size    20m;
                proxy_redirect    off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

}



apache主机部分配置:


Listen 127.0.0.1:82
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialogbuiltin
SSLSessionCache         dbm:/var/run/ssl_scache
SSLMutexfile:/var/run/ssl_mutex
<VirtualHost 127.0.0.1:82>
DocumentRoot "/home/www/magapp"
ServerName magapp.im286.net
ServerAdmin tech@im286.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/nginx/conf/magapp.crt
SSLCertificateKeyFile /usr/local/nginx/conf/magapp.key
</VirtualHost>



目前阿里云有免费的SSL证书可以申请,验证域名即可。如果实在审批不过,就去买一个Geotrust的,应该也在100RMB/年以内

落英缤纷 发表于 2016-12-14 23:12:18

然后使用SSL 需要耗费的服务器性能是HTTP的3到10倍。

HiTgril 发表于 2016-12-14 23:19:55

SSL会不会有的用户打开网站慢,卡,或者浏览器对证书不支持啥的。
我电脑就不知道啥原因,好多SSL网站打不开。所有浏览器都那样。

crazy 发表于 2016-12-14 23:48:27

落英缤纷 发表于 2016-12-14 23:12
然后使用SSL 需要耗费的服务器性能是HTTP的3到10倍。

没有这么厉害,不要危言耸听,影响几乎是可以忽略不计的

crazy 发表于 2016-12-14 23:51:27

HiTgril 发表于 2016-12-14 23:19
SSL会不会有的用户打开网站慢,卡,或者浏览器对证书不支持啥的。
我电脑就不知道啥原因,好多SSL网站打不 ...

1.证书问题,旧版本浏览器有很多ca签发的证书都不支持,会提示证书有问题。
2.加密算法问题,旧版本浏览器可能不支持比较新的加密算啊,会直接访问不了。

mitu 发表于 2016-12-15 00:10:01

感觉落伍速度快了不少,和这有关系?

GoogleSpider 发表于 2016-12-15 09:18:03

hl530 发表于 2016-12-15 10:02:42

DZ3.2用了,首页加载了不CSS是什么原因?

crazy 发表于 2016-12-15 10:13:14

hl530 发表于 2016-12-15 10:02
DZ3.2用了,首页加载了不CSS是什么原因?

首页不要缓存

crazy 发表于 2016-12-15 10:13:14

hl530 发表于 2016-12-15 10:02
DZ3.2用了,首页加载了不CSS是什么原因?

首页不要缓存
页: [1] 2
查看完整版本: 使用Nginx配置单IP下多个SSL主机