一、基于域名的几种互联网企业需求解析
多用户二级域名
泛解析 = 通配符解析,用一个 * 匹配所有子域名:
*.senrenbanka.art. A 1.14.137.231
多域名系统配置如下:

实现功能:通过 nginx 泛解析域名到 Tomcat(反向代理),匹配数据库的值,返回信息到 nginx 服务器然后发送到客户端。
反向代理下面的模块会有:
客户端(浏览器)
↓ 访问任意子域名:xxx.senrenbanka.art
DNS 泛解析(*.senrenbanka.art → 服务器 IP)
↓
Nginx(泛解析匹配 server_name)
↓ 反向代理转发
Tomcat(处理请求)
↓ 查询数据库
数据库(返回数据给 Tomcat)
↓
Tomcat(处理数据,生成响应)
↓
Nginx(接收响应)
↓
客户端(浏览器显示页面)
短网址
实现功能:访问 dwz.cn/lingdiningning0721 跳转到真实的网址。
真实地址存入数据库,系统返回一个短网址 UUID 作为 key,真实地址作为 value。
用户访问短网址时,nginx 反向代理把请求打到后端应用服务器上,把后面的字符串带到 DB 匹配,拿到真实地址再 redirect(重定向),实现了类似 302 的效果:

图稍微有点乱,凑合看吧。
用户访问:dwz.cn/lingdiningning0721
↓
Nginx(泛解析 *.dwz.cn)
↓ 反向代理
后端应用(Tomcat/Flask/Node.js)
↓ 提取 UUID = lingdiningning0721
↓ 查询 DB
数据库:SELECT real_url WHERE short_code = 'lingdiningning0721'
↓ 返回 https://very.long.url/xxx
后端应用
↓ 302 Redirect
Nginx
↓
浏览器跳转到真实网址
HTTPDNS
之前配置的 DNS 服务器走的 UDP 协议,HTTPDNS 走 HTTP 协议。
不适合网页使用,适合 APP、基于 C/S 架构的应用,可以在软件里面"刻入"几个 IP 地址,这个地址就是 Nginx 服务器的地址。
走 HTTPDNS 协议必须要有 HTTPDNS 服务器的地址。
在系统启动之后 APP 会向此 IP 发送请求,请求某个域名的当前 IP 地址(普通解析是把域名发送到 DNS 服务器上查询,而现在发到 HTTP 服务器上,即发送到 Nginx 上),假设客户端发送 IP 是 192.168.88.8,真实的数据是以参数的形式发送的:
192.168.88.8/get.php?name=需要查询的域名
系统接到请求之后,查询 IP 地址(DB,txt,内存中)然后返回 IP。
第一次请求是不知道域名的 IP 的,所以无法在浏览器上使用,浏览器不允许外部直接加载 IP 给自己:

二、Nginx 隧道式模型:网关、代理和反向代理
正反代理的解释

如图所示:用户把请求发送到网关,网关转发到 Nginx 服务器(作为反向代理服务器),会把请求转发到后端的应用服务器上,Tomcat 不会被用户直接访问到(服务器不接入外网),用户只能通过 Nginx 代理访问。
Tomcat 会把结果返回给 Nginx,由 Nginx 发送给客户端。
正向代理区分:如下图,用户主动上网,通过代理服务器访问外网:

用户和外网不通。
两种代理的共同点都是不能直接访问,通过代理服务器访问。
区别:正向是主动开启访问入口,反向代理是 Tomcat 主动开启访问入口。
网关的解释
路由器作为网关经手所有流量,给下一跳数据包,直到目标服务器,直接从过程看和代理服务器是没区别的,所以 Nginx 服务器也可以看作网关。
这里对网关的新的理解:流量的出入口。
同理,发送的数据经过网关,返回的数据也会经过网关。
因此,如果网关的带宽不够大,流量就会阻塞(不管是路由器还是 Nginx 都是同样的道理),没有有效的方式避免,只能提升带宽。
Nginx 的带宽就是整个网络集群的带宽,在高 I/O 下,Nginx 的反向代理就不合适了,因为 Nginx 是 I/O 都在一起的隧道式代理(顾名思义了)。
但是 Nginx 又很重要,不能直接不用,所以可以这样:在访问 Tomcat(集群)时通过代理访问,而返回请求直接发给客户端(实际上是发给机房网关,不是 Nginx 哦)。
这时候就用到了 LVS,专业的负载均衡器,可以隧道式的反向代理,也可以做 DR 模型(就是上面提到的),比如请求下载一个文件(1k)和返回文件(721M),这时候 LVS 的性能就很好地体现了。
实现功能:后端集群只能收到 Nginx 经手的入网请求,出网和机房的网关互连(连不到外网但是能传输数据,限制了功能,保障了安全),如下图:

至于具体的实现操作,在后面会有。
Nginx 反向代理在企业中的应用场景
QPS:并发量(每秒请求),真实的企业级项目基本都在 300 下。
业务系统如图:传统架构


简化描述:用户的请求到机房内部网关,由 Nginx 反向代理到后端集群。
简单介绍后端的 Gateway:把所有的业务服务器统一管理,起到查找、鉴权的功能。
中小型互联网项目:这里暂时简单说,后面才是深入的。

当 Nginx 承受较大流量的时候可以用多台 Nginx,进行负载均衡:
