使用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/年以内 然后使用SSL 需要耗费的服务器性能是HTTP的3到10倍。 SSL会不会有的用户打开网站慢,卡,或者浏览器对证书不支持啥的。
我电脑就不知道啥原因,好多SSL网站打不开。所有浏览器都那样。 落英缤纷 发表于 2016-12-14 23:12
然后使用SSL 需要耗费的服务器性能是HTTP的3到10倍。
没有这么厉害,不要危言耸听,影响几乎是可以忽略不计的 HiTgril 发表于 2016-12-14 23:19
SSL会不会有的用户打开网站慢,卡,或者浏览器对证书不支持啥的。
我电脑就不知道啥原因,好多SSL网站打不 ...
1.证书问题,旧版本浏览器有很多ca签发的证书都不支持,会提示证书有问题。
2.加密算法问题,旧版本浏览器可能不支持比较新的加密算啊,会直接访问不了。 感觉落伍速度快了不少,和这有关系? DZ3.2用了,首页加载了不CSS是什么原因?
hl530 发表于 2016-12-15 10:02
DZ3.2用了,首页加载了不CSS是什么原因?
首页不要缓存 hl530 发表于 2016-12-15 10:02
DZ3.2用了,首页加载了不CSS是什么原因?
首页不要缓存
页:
[1]
2