`
wx1569578408
  • 浏览: 71530 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Nginx 单IP下 配置多个server https 的问题

 
阅读更多


我们的负载均衡架构是这样的:


请求 —> 网络 —> LVS集群 —> Nginx 集群 —> APP 


LVS使用FULLNAT模式,每台Nginx 机器只有一个IP(内网IP),LVS也是把流量转到这个IP。如果Nginx想对多个域名使用https,比如两个域名 wandoujia.com 和 wandoulabs.com ,是可能有问题的。


 


看下面的配置(两个server写在不同文件中,用 include * 加载):


server {

    listen 80;

    listen 443 ssl;

    server_name test.wandoujia.com;

    ssl_certificate wandoujia.crt;

    ssl_certificate_key wandoujia.key;

    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers HIGH:!aNULL:!MD5;

    ...

}

 

server {

    listen 80;

    listen 443 ssl;

    server_name test.wandoulabs.com;

    ssl_certificate wandoulabs.crt;

    ssl_certificate_key wandoulabs.key;

    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers HIGH:!aNULL:!MD5;

    ...

}

这样你访问 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 443 ssl;,类似:


http {

    ...

    ssl_certificate wandoujia.crt;

    ssl_certificate_key wandoujia.key;

    #ssl_certificate wandoulabs.crt;

    #ssl_certificate_key wandoulabs.key;

    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers HIGH:!aNULL:!MD5;

    ...

}

 

server {

    listen 80;

    listen 443 ssl;

    server_name test.wandoujia.com;

    ...

}

 

#server {

#    listen 80;

#    listen 443 ssl;

#    server_name test.wandoulabs.com;

#    ...

#}

 


那么怎么才能实现多域名的 https 呢,是有办法的,叫做 TLS Server Name Indication extension(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 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).

同样,在服务器端 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 * 包含),可能会出现奇怪的问题,我是遇到过的。


转载于:https://my.oschina.net/u/923508/blog/423618

分享到:
评论

相关推荐

    Nginx一个IP如何配置多个站点的方法教程

    对于Nginx,一个IP上配置多个站点还是很常见的。尤其是在开发环境上,更是如此。 下面在我的阿里云上简单的实现这样一个需求: 在一个IP上通过对端口区分来配置多个站点。 环境初始化目录一览配置站点准备添加配置...

    Nginx单IP地址配置多个SSL证书的方法示例

    为了解决这个问题,我们可以利用TLS Server Name Indication (SNI) 扩展,使得Nginx在一个IP地址上能够支持多个SSL证书。 首先,我们需要确保Nginx服务器已经支持SNI功能。可以通过运行`nginx -V`命令来查看Nginx的...

    windows下nginx配置https以及同一个端口监听多个网站即监听多个虚拟主机

    在Windows环境下,配置Nginx以支持HTTPS及在同一端口监听多个网站,即配置多个虚拟主机,是一项常见的网络服务设置任务。Nginx是一个高性能的HTTP和反向代理服务器,以其稳定性、高并发处理能力而受到广泛使用。下面...

    nginx跨域问题,解决多端口,多ip问题

    服务器配置:在服务器配置中,需要配置 Nginx 的端口和 IP 地址,以确保服务器的安全性。 三、Nginx 配置方面 Nginx 配置方面是解决跨域问题的关键所在。以下是 Nginx 的配置示例: ``` server { listen 80; ...

    详解nginx同一端口监听多个域名和同时监听http与https

    具体操作方法是在Nginx的配置文件中设置多个server块,每个server块的server_name指令指定一个域名。当有请求到达时,Nginx会根据HTTP请求头中的Host字段来决定将请求转发到哪一个server块。这里有一个重要的注意...

    Nginx 同IP 多域名 HTTPS SSL 配置

    IIS7.5下同IP多域名配置SSL, IIS 7.5 以下版本不支持多域名共用443端口 SSL 服务,采用nginx 单独处理来自443端口的请求,从而实现多域名 SSL 附件包含,图文设置nginx, nginx免安装包,可直接使用,已支持SNI(Server ...

    Windows nginx +多个 tomcat 配置

    Windows nginx +多个 Tomcat 配置是一种常见的服务器架构,用于解决网站高并发的问题。通过使用 nginx 作为反向代理服务器,并将多个 Tomcat 服务器作为后端服务器,可以实现负载均衡,提高网站的访问速度和并发...

    nginx简单配置多个server的方法

    1:安装nginx步骤就不说了 ,自行百度。 2:打开nginx的配置文件nginx.conf 这是项目1的配置,现在需要再开个同域名不同端口的...到此这篇关于nginx简单配置多个server的方法的文章就介绍到这了,更多相关nginx配置

    nginx配置+https

    ### Nginx 配置与 HTTPS 实现详解 #### 一、Nginx 简介及配置结构 Nginx 是一个高性能的 HTTP 和反向...此外,通过配置不同的 Server 块,可以灵活地管理多个网站或应用服务,极大地提高了 Nginx 的实用性和灵活性。

    nginx-配置多个tomcat

    配置Nginx以代理多个Tomcat实例,首先需要在`nginx.conf`配置文件中定义多个server块。每个server块对应一个域名,里面包含一个location块,用于指定处理特定路径的请求。例如: ```conf server { listen 80; ...

    nginx配置 +负载均衡+https协议

    - 对于负载均衡,可以通过在Nginx配置文件中定义多个后端服务器,并使用`proxy_pass`指令来实现。 ```nginx upstream backend { server backend1.example.com; server backend2.example.com; } server { ...

    CentOS7.3下Nginx基于IP+端口的虚拟主机配置实战.pdf

    在本教程中,我们将详细介绍如何在CentOS 7.3系统下配置基于IP和端口的Nginx虚拟主机。首先,了解Nginx的基本概念...这样的配置方式,尤其适用于需要在同一服务器上运行多个网站,且希望避免使用多个物理IP地址的情况。

    centos安装多个nginx实现反向代理.zip

    总之,通过在CentOS上配置多个Nginx实例,我们可以轻松地为多个项目(如Vue.js和Java应用)设置反向代理,提供高效、灵活的Web服务。通过合理地规划和配置,可以实现负载均衡、安全保护和性能优化,满足企业级应用的...

    centos Centos系统上 nginx 代理多个域名站点 nginx配置

    Centos系统上 nginx 代理多个域名站点 nginx配置,多个域名解析到同一IP,服务器上启动多个服务

    nginx配置文件-安装客户端ip进行转发

    总的来说,Nginx的配置文件允许我们灵活地管理网络流量,通过`proxy_pass`指令和相关的头信息设置,我们可以确保客户端IP信息在转发过程中得到保留。这在需要追踪用户行为、实施安全策略或者进行负载均衡时尤其有用...

    nginx的各项详细配置-超多注释

    - **http块**: 包含多个server块,定义HTTP协议相关设置,如开启gzip压缩(gzip on)。 - **server块**: 定义一个监听端口的服务器,可以有多个,如监听80端口(listen 80)。 - **location块**: 处理特定URL请求,...

    windows下配置nginx反向代理tomcat

    ### Windows 下配置 Nginx 反向代理 Tomcat 在 Windows 环境下配置 Nginx 作为 Tomcat 的反向代理服务器是一项常见的任务,主要用于实现负载均衡、提高安全性及提升性能等目的。本文将从下载 Nginx 开始,详细介绍...

    在linux系统下安装两个nginx的简单方法

    在实际工作中,有时我们需要在同一台Linux服务器上安装并运行多个Nginx实例,以满足不同项目的需求或进行A/B测试等操作。本文将详细介绍如何在Linux系统下安装两个Nginx,并确保它们能够正常运行而不互相干扰的方法...

    Nginx配置多个HTTPS域名的方法

    本文主要讨论如何使用Nginx配置支持多个HTTPS域名的服务器。 首先,要使用Nginx支持多个HTTPS域名,需要确保Nginx编译时包含必要的模块。通常情况下,Nginx需要与OpenSSL库配合使用,并启用SSL模块(--with-...

Global site tag (gtag.js) - Google Analytics