048:Nginx反向代理&负载均衡
1 Nginx课程内容安全介绍
Nginx核心课程介绍
1.理解Nginx在实际项目应用场景
2.理解正向代理与反向代理区别
3.Nginx在Linux与Windows环境安装
4.Nginx的运行模型概念与日志管理
5.Nginx.Config核心配置文件与配置Https证书
6.基于Nginx解决跨域、实现防盗链、缓存、压缩
7.Nginx+Keepalived服务之间实现高可用
8.Nginx+Lua+OpenResty实现亿级别商品详情页面
课程内容:
1.DNS域名解析过程
2.反向代理与正向代理的介绍
3.基于Nginx实现反向代理
4.基于Nginx实现负载均衡
2 DNS域名解析整个过程
DNS域名解析的过程
1.先从本地host文件中使用域名获取对应的ip地址;
2.如果本地host文件中没有的话,就去运营商获取ip地址;
C:\Windows\System32\drivers\etc
3 使用Nginx搭建反向代理整个过程
Nginx基本的介绍
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx实际应用场景
- 反向代理 客户端使用Nginx转发到真实服务器访问,从而保证真实服务安全性;
- 负载均衡 能够对集群的节点实现负载均衡;
- 微服务网关入口 实现对服务转发 根据域名路由到真实的服务;
- 静态服务器 比Tomcat性能高很多,可以存放静态资源;
- 保护网站 nginx+lua实现对请求实现限流、熔断;
反向代理场景
阿里云如何搭建局域网?
阿里云同一个账号买的服务器默认在同一个局域网中。
4 Nginx实现反向代理与正向代理区别
正向代理场景
cdsn屏蔽,自行百度;
反向代理与正向代理区别
正向代理:cdsn屏蔽,自行百度;
反向代理:客户端请求达到代理服务,再通过代理服务器转发到真实服务器。
正向代理与反向代理区别:正向代理隐藏用户的真实行为、反向代理隐藏真实服务器。
5 windows环境中安装Nginx服务器
Windows环境快速入门
1.下载winDows安装包
2.解压当前目录
3.双击nginx.exe
4.Nginx默认端口号为80
Nginx目录结构介绍
Conf 配置文件(nginx核心配置文件 nginx.conf)
Contrib 存放一些实用工具
Docs 存放文档
Html 存放Html
Logs 存放日志文件
Temp 临时文件
6 使用Nginx配置反向代理方式
启动springboot项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
server:
port: 8080
@RestController
@SpringBootApplication
public class IndexController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/")
public String index() {
return "每特教育&蚂蚁课堂:" + serverPort;
}
public static void main(String[] args) {
SpringApplication.run(IndexController.class);
}
}
基于Nginx实现反向代理
C:\Windows\System32\drivers\etc\hosts文件中新增127.0.0.1 www.mayikt.com
server {
## 使用nginx创建监听端口号为80
listen 80;
## 访问地址
server_name 127.0.0.1;
## 根据url规则进行匹配 /表示拦截所有请求
location / {
## 反向代理配置
proxy_pass http://127.0.0.1:8080;
## 默认查找index.html/index.htm
index index.html index.htm;
}
}
测试结果:
结果分析:访问www.mayikt.com,经过本地hosts文件配置实际访问127.0.0.1:80,nginx配置监听到该请求,反向代理请求到127.0.0.1:8080,即请求转发到本地项目。
7 服务器集群会存在哪些问题
服务器集群中会存在哪些问题
服务器集群中jar包都是完全相同的
- 分布式Session一致性问题 可以使用spring-session框架或者Token替代(redis共享)解决
- 分布式任务调度重复执行 分布式任务调度平台 xxl-job
- 分布式日志收集问题 elk+kafka日志收集
注意:分布式事务和节点集群没有关系
8 使用Nginx实现对服务负载均衡
基于Nginx实现负载均衡
五种负载均衡策略
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
配置负载均衡策略
Nginx负载均衡提供上游服务器(真实业务逻辑访问的服务器)负载均衡、故障转移、失败重试、容错、健康检查等。
当上游服务器发生故障时,可以转移到其他上游服务器。
Upstream Server配置
upstream 主要配置如下:
IP地址和端口号:配置上游服务器的IP地址和端口
配置轮询负载均衡
###定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮询机制
upstream backServer{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name www.mayikt.com;
location / {
proxy_pass http://backServer;
index index.html index.htm;
}
}
注意:负载均衡效果谷歌浏览器需要直接从浏览器中访问才可以生效
配置权重负载均衡
###定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮询机制
upstream backServer{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server {
listen 80;
server_name www.mayikt.com;
location / {
proxy_pass http://backServer;
index index.html index.htm;
}
}
测试结果:
9 软负载与硬负载实现有那些区别
软负载与硬负载区别
软负载是基于服务器上安装的特定软件比如Nginx实现负载均衡;
硬负载均衡是基于固定的硬件实现负载均衡比如F5
10 Nginx课后作业题
作业题:
1.根据域名转发不同服务
2.根据项目名称转发不同的服务