day 07 反向代理Nginx
此文档是根据上课流程编写,更多细节及图片请参见刘老师的专栏
江哥的专栏
一. 实现文件上传
为属性赋值
i. 编辑pro配置文件
# 配置本地磁盘根目录 image.fileDir=E:/jt_img # 配置图片服务器地址 image.urlPath=http://image.jt.com
ii. 编辑FileServiceImpl
@Service @PropertySource(value = "classpath:/properties/image.properties",encoding = "UTF-8") //将配置文件导入容器 public class FileServiceImpl implements FileService{ @Value("${image.fileDir}") private String fileDir;// = "E:/jt_img"; @Value("${image.urlPath}") private String url; //设定域名地址 }
-- 至此,京淘后端的代码搭建完成 --
二. 反向代理/正向代理
- 反向代理特点
i. 反向代理服务器是位于用户和目标服务器之间的一个代理服务器;
ii. 用户访问反向服务器就可以获取到目标服务器的资源,即相当于访问了目标服务器,用户不知道真实的服务器是谁;
iii. 反向代理服务器保护了服务器端的信息,称之为服务器端代理。
- 业务分析
用户访问:http://image.jt.com/a.jpg --> 反向代理服务器
服务器:D:/jt_img/a.jpg
i. 反向代理服务器[配置文件将image.jt.com映射为D:/jt_img]
ii. 用户由于某种原因无法访问目标服务器,完成指定功能
- 正向代理特点
i. 位于客户端和原始服务器之间的服务器;
ii. 用户向代理发送一个请求,指定目标服务器,用户非常明确目标服务器到底是谁。代理服务器将从目标服务器中获取的内容返回给用户。服务器不清楚到底是被谁访问的;
iii. 保护了用户的信息,称之为客户端代理。
总结:
1) 反向代理是服务器端代理,只要用户访问服务器,就是反向代理。实现业务调用
2) 正向代理是客户端代理,只要用户上网,就使用正向代理。实现网络通信
网穿工具:夜神模拟器/花生壳/xxx
三. Nginx软件负载均衡服务器
- 下载Nginx-windows版安装包
参见官网《nginx: download》
- 特点:
1) 占用内存少,tomcat负责整个项目的运行-200M,nginx负责请求的转发-不到2M;
2) 并发能力强 5万/秒 实际2-4万/秒
- 安装与使用
nginx启动会生成两个进程项,其中的一个主进程提供反向代理服务,另一个守护进程防止主进程意外关闭。在关闭时应该先关闭守护进程,内存占用多的是主进程。
F5 硬件负载均衡服务器
Ngnix命令
工作目录说明:要求在nginx.exe所在的根目录下执行
i. 启动命令
start ngnix
ii. 重名命令
ngnix -s reload
iii. 关闭命令
ngnix -s stop
Nginx反向代理的原理
i. 入门案例说明
http://localhost:80
ii. 配置项:一个协议http
#一个服务,一个server server { #监听的端口号 一般不改 listen 80; #监听的域名 localhost:80 server_name localhost;#charset koi8-r; #access_log logs/host.access.log main; #开启反向代理的策略 / 代表全部的请求 location / { #root关键字 代理具体的目录 root html; #index关键字 代表默认的页面 index index.html index.htm; } }
实现图片的回显
i. 业务需求
url地址:http://image.jt.com/2020/
本地磁盘地址:E:\jt_image\
ii. 配置Nginx
#1.配置图片代理 server{ listen 80; server_name image.jt.com;location / { root E:/jt_img; }
iii. 配置HOSTS文件
作用:实现本地域名与IP地址的映射
位置:C:\Windows\System32\drivers\etc
# 京淘 127.0.0.1 image.jt.com 127.0.0.1 manager.jt.com 127.0.0.1 www.jt.com 127.0.0.1 sso.jt.com 127.0.0.1 localhost
实现域名代理
i. 业务说明
要求用户输入http://manage.jt.com 访问localhost:8091服务器
ii. 实现方式:利用反向代理方式
#2.配置后端服务器 manage.jt.com server{ listen 80; server_name manager.jt.com; location / { #发起url请求地址 proxy_pass http://localhost:8091; } }
四. Nginx实现tomcat集群发布
- 集群搭建原理
使用三台tomcat服务器处理请求。
动态展现端口号
编写PortController
@RestController public class PortController { @Value("${server.port}") private int port; @RequestMapping("/getPort") public String getPort(){ return "当前访问的端口号:"+port; } }
- tomcat项目打包
i. 说明:由于需要准备3台tomcat服务器,端口号依次是8081/8082/8083
ii. 准备三台tomcat服务器
clean --> compile --> install
负载均衡配置
i. 轮询策略:根据配置文件的顺序,依次访问服务器。
#2.配置后端服务器 manage.jt.com server{ listen 80; server_name manager.jt.com; location / { #发起url请求地址 #proxy_pass http://localhost:8091; proxy_pass http://jtwindows; } } # 配置tomcat服务器集群 upstream jtwindows{ server 127.0.0.1:8091; server 127.0.0.1:8082; server 127.0.0.1:8083; }
ii. 权重策略:让性能更优的服务器处理更多的请求。
# 配置tomcat服务器集群 upstream jtwindows{ server 127.0.0.1:8091 weight=6; server 127.0.0.1:8082 weight=3; server 127.0.0.1:8083 weight=1; }
iii. IP哈希策略:需要将用户与某台服务器进行绑定
使用场景:在线客服,在线考试系统
原理:IP地址 --> hash(ip)%3 [O(1)]--> 0,1,2
# 配置tomcat服务器集群 upstream jtwindows{ ip_hash; server 127.0.0.1:8091 weight=6; server 127.0.0.1:8082 weight=3; server 127.0.0.1:8083 weight=1; }
Nginx高级属性
i. down属性
如果服务器宕机,则可以通过down属性进行标识,被标识的服务器则不会为用户提供访问
server 127.0.0.1:8091 weight=6 down;
ii. backup属性
备用机的设定。一般条件下备用机不干活,但当主机遇忙或宕机时才会访问备用机
server 127.0.0.1:8083 weight=1 backup;
iii. tomcat服务器高可用
max_fails:设定最大的失败次数,如果超过最大次数则标识为down
fail_timeout:失效的超时时间:60s
server 127.0.0.1:8082 weight=3 max_fails=1 fail_timeout=60s;
五. 虚拟机介绍
参见《Linux.doc》CGB-2008讲义\13_第四阶段-京淘新版本资料\京淘新版本资料\课上资料-配-文件\3-文件上传-nginx负载均衡\3-Linux命令
- 网络模式说明
i. 桥接模式
虚拟机直接接入局域网,会独占IP,可与本机通过局域网通信。需要物理设备的支持。
ii. NAT模式
相当于在网络环境中开辟一块全新的网络空间,只有主机能够访问,其他人不能通过ip访问。
- 修改虚拟机mac地址 00:50:56:2C:25:B6
- 配置IP地址 192.168.126.0
检查Windows/Linux IP
C:\Users\Jacques>ping 192.168.126.129 正在 Ping 192.168.126.129 具有 32 字节的数据: 来自 192.168.126.129 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.126.129 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.126.129 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.126.129 的回复: 字节=32 时间<1ms TTL=64 192.168.126.129 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 0ms,最长 = 0ms,平均 = 0ms
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。