Nginx 单IP下 配置多个s…
来源:互联网 发布:ota产品数据分析 编辑:程序博客网 时间:2024/05/16 13:44
很早之前就遇到类似的问题,今天写下来以防忘记。
我们的负载均衡架构是这样的:
请求 —> 网络 —> LVS集群 —> Nginx 集群 —> APP
LVS使用FULLNAT模式,每台Nginx机器只有一个IP(内网IP),LVS也是把流量转到这个IP。如果Nginx想对多个域名使用https,比如两个域名wandoujia.com 和 wandoulabs.com ,是可能有问题的。
看下面的配置(两个server写在不同文件中,用 include * 加载):
server {
}
server {
}
这样你访问 https://test.wandoujia.com 或者https://test.wandoulabs.com,都可能报证书有问题,这是为什么。
事实上,SSL运行在TCP之上(SSL/TLS协议),ssl通过四次握手和服务器(这里是Nginx,LVS纯转发,可忽略)的IP+PORT(443)建立ssl连接,建立连接之后浏览器才会发送HTTP请求。所以在Nginx收到HTTP请求之后才知道Host,才知道转到哪个server去处理,所以在SSL连接建立的时候Nginx是不知道用哪个 Server的SSL配置的,在这种情况下,Nginx会使用它加载到的第一个SSL配置(需验证)。当然如果你在listen 443的后面加上default_server,Nginx就会使用此SSL配置,即:
listen 443 default_server ssl;
那么对于单域名的https,我更喜欢把SSL配置写在http配置里,在server只需要加上 listen 443ssl;,类似:
http {
}
server {
}
#server {
#
#
#
#
#}
那么怎么才能实现多域名的 https 呢,是有办法的,叫做 TLS Server Name Indicationextension(SNI, RFC 6066),它允许浏览器在SSL握手的时候发送请求的server name,也就是Host,这样 Nginx 就能找到对应server 的SSL配置。
但是要浏览器支持SNI 才可以,支持SNI的浏览器有:
Opera 8.0;
MSIE 7.0 (but only on Windows Vista or higher);
Firefox 2.0 and other browsers using Mozilla Platformrv:1.8.1;
Safari 3.2.1 (Windows version supports SNI on Vista orhigher);
and Chrome (Windows version supports SNI on Vista or higher,too).
同样,在服务器端 openssl 要支持SNI,编译的时候加上–enable-tlsext 即可,不过从 0.9.8j版本开始编译的时候默认会加。openssl 支持了SNI,Nginx 才可以work,确认是否OK:
$ ./nginx -V
...
TLS SNI support enabled
...
所以,如果想要实现多域名https,要确认你的Nginx 支持 TLS SNI support,然后在server单独配置SSL, 但是要注意,某些浏览器会有问题,而且因为Nginx加载server的顺序不同(特别是每个server在同一目录的不同文件中,然后在nginx.conf主配置文件中用 include *包含),可能会出现奇怪的问题,我是遇到过的。
参考:
http://nginx.org/en/docs/http/configuring_https_servers.html#name_based_https_servers
- Nginx 单IP下 配置多个s…
- Nginx 单IP下 配置多个server https 启示录
- Nginx 虚拟主机 VirtualHost 配置
- nginx 获取源IP
- Nginx Location配置总结(loca…
- HDOJ 4337 King Arthur's Knigh…
- nginx/windows: nginx多虚拟…
- windows 和 linux下,查看oracle S…
- Centos6.2 下Nginx的安装和配置
- linux环境下单网卡配置多个IP地址
- JAVA EE Eclipse下配置T…
- 【原】Win7 下配置安装Cygwin sshd…
- nginx配置ThinkPHP Rewrite
- nginx 经典配置教程
- Nginx Location配置总结
- How to Install and Run Network S…
- Le le's picture when aged 5 mont…
- How to setup build service for s…
- Redis 代理服务Twemproxy--hash
- 服务器的IP和Vip什么差别
- Nginx模块参考手册:HTTP代理模块(…
- Nginx 用log_format设置日志格式
- 关于 Nginx 499 和…
- Nginx 单IP下 配置多个s…
- Nginx Cache方面的设置
- Nginx Location配置总结
- rsync安装、配置、实例
- Nginx 开启Gzip压缩的方法(非…
- 仿微信摇一摇功能的实现
- php-fpm 启动参数及重要配置详解
- Linux下chkconfig命令详解
- 服务器数据库系列 - Ngi…