我们的负载均衡架构是这样的:
请求 —> 网络 —> 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 * 包含),可能会出现奇怪的问题,我是遇到过的。
相关推荐
对于Nginx,一个IP上配置多个站点还是很常见的。尤其是在开发环境上,更是如此。 下面在我的阿里云上简单的实现这样一个需求: 在一个IP上通过对端口区分来配置多个站点。 环境初始化目录一览配置站点准备添加配置...
为了解决这个问题,我们可以利用TLS Server Name Indication (SNI) 扩展,使得Nginx在一个IP地址上能够支持多个SSL证书。 首先,我们需要确保Nginx服务器已经支持SNI功能。可以通过运行`nginx -V`命令来查看Nginx的...
在Windows环境下,配置Nginx以支持HTTPS及在同一端口监听多个网站,即配置多个虚拟主机,是一项常见的网络服务设置任务。Nginx是一个高性能的HTTP和反向代理服务器,以其稳定性、高并发处理能力而受到广泛使用。下面...
服务器配置:在服务器配置中,需要配置 Nginx 的端口和 IP 地址,以确保服务器的安全性。 三、Nginx 配置方面 Nginx 配置方面是解决跨域问题的关键所在。以下是 Nginx 的配置示例: ``` server { listen 80; ...
具体操作方法是在Nginx的配置文件中设置多个server块,每个server块的server_name指令指定一个域名。当有请求到达时,Nginx会根据HTTP请求头中的Host字段来决定将请求转发到哪一个server块。这里有一个重要的注意...
IIS7.5下同IP多域名配置SSL, IIS 7.5 以下版本不支持多域名共用443端口 SSL 服务,采用nginx 单独处理来自443端口的请求,从而实现多域名 SSL 附件包含,图文设置nginx, nginx免安装包,可直接使用,已支持SNI(Server ...
Windows nginx +多个 Tomcat 配置是一种常见的服务器架构,用于解决网站高并发的问题。通过使用 nginx 作为反向代理服务器,并将多个 Tomcat 服务器作为后端服务器,可以实现负载均衡,提高网站的访问速度和并发...
1:安装nginx步骤就不说了 ,自行百度。 2:打开nginx的配置文件nginx.conf 这是项目1的配置,现在需要再开个同域名不同端口的...到此这篇关于nginx简单配置多个server的方法的文章就介绍到这了,更多相关nginx配置
### Nginx 配置与 HTTPS 实现详解 #### 一、Nginx 简介及配置结构 Nginx 是一个高性能的 HTTP 和反向...此外,通过配置不同的 Server 块,可以灵活地管理多个网站或应用服务,极大地提高了 Nginx 的实用性和灵活性。
配置Nginx以代理多个Tomcat实例,首先需要在`nginx.conf`配置文件中定义多个server块。每个server块对应一个域名,里面包含一个location块,用于指定处理特定路径的请求。例如: ```conf server { listen 80; ...
- 对于负载均衡,可以通过在Nginx配置文件中定义多个后端服务器,并使用`proxy_pass`指令来实现。 ```nginx upstream backend { server backend1.example.com; server backend2.example.com; } server { ...
在本教程中,我们将详细介绍如何在CentOS 7.3系统下配置基于IP和端口的Nginx虚拟主机。首先,了解Nginx的基本概念...这样的配置方式,尤其适用于需要在同一服务器上运行多个网站,且希望避免使用多个物理IP地址的情况。
总之,通过在CentOS上配置多个Nginx实例,我们可以轻松地为多个项目(如Vue.js和Java应用)设置反向代理,提供高效、灵活的Web服务。通过合理地规划和配置,可以实现负载均衡、安全保护和性能优化,满足企业级应用的...
Centos系统上 nginx 代理多个域名站点 nginx配置,多个域名解析到同一IP,服务器上启动多个服务
总的来说,Nginx的配置文件允许我们灵活地管理网络流量,通过`proxy_pass`指令和相关的头信息设置,我们可以确保客户端IP信息在转发过程中得到保留。这在需要追踪用户行为、实施安全策略或者进行负载均衡时尤其有用...
- **http块**: 包含多个server块,定义HTTP协议相关设置,如开启gzip压缩(gzip on)。 - **server块**: 定义一个监听端口的服务器,可以有多个,如监听80端口(listen 80)。 - **location块**: 处理特定URL请求,...
### Windows 下配置 Nginx 反向代理 Tomcat 在 Windows 环境下配置 Nginx 作为 Tomcat 的反向代理服务器是一项常见的任务,主要用于实现负载均衡、提高安全性及提升性能等目的。本文将从下载 Nginx 开始,详细介绍...
在实际工作中,有时我们需要在同一台Linux服务器上安装并运行多个Nginx实例,以满足不同项目的需求或进行A/B测试等操作。本文将详细介绍如何在Linux系统下安装两个Nginx,并确保它们能够正常运行而不互相干扰的方法...
本文主要讨论如何使用Nginx配置支持多个HTTPS域名的服务器。 首先,要使用Nginx支持多个HTTPS域名,需要确保Nginx编译时包含必要的模块。通常情况下,Nginx需要与OpenSSL库配合使用,并启用SSL模块(--with-...