第一天
1. 技术选型

2. 熟悉后端框架

每一个模块作用:

3 前端是如何请求到后端的?两者的请求路径并不相同,如图:
前端login请求路径:

后端login请求路径:



显然二者并不相同。
所以到底前端是如何请求到后端路径的呢?
- 答案是:nginx的反向代理。
首先介绍什么是nginx:
Nginx(发音为 "engine-x")是一款高性能的 HTTP 服务器和反向代理服务器。它最初由 Igor Sysoev 为解决著名的 C10K 问题(即单机如何同时处理一万个并发连接)而设计。
与传统的 Apache 服务器不同,Nginx 采用的是事件驱动(Event-driven)和非阻塞(Non-blocking)的架构,这使得它在处理高并发请求时,内存占用极低且性能极其稳定。
- Nginx 的核心功能
反向代理 (Reverse Proxy): 这是 Nginx 最常用的功能。客户端请求 Nginx,Nginx 再将请求转发给后端的应用服务器(如 Java 的 Tomcat、Python 的 Gunicorn 等)。这样可以隐藏真实服务器的 IP,提高安全性。
反向代理示意图:

负载均衡 (Load Balancing): 当你有多个后端服务器时,Nginx 可以根据策略(如轮询、权重等)将流量分摊到不同的服务器上,防止单台服务器压力过大。
静态资源服务: Nginx 处理图片、CSS、JS、HTML 等静态文件的速度极快。通常会让 Nginx 直接分发这些文件,而不经过后端应用。
SSL/TLS 卸载: Nginx 可以统一处理 HTTPS 证书,将解密后的 HTTP 请求发给后端,减轻后端服务器的计算压力。
- Nginx 的优势
| 特性 | 描述 |
|---|---|
| 高并发 | 能够支撑数万甚至数十万的并发连接 。 |
| ---- | ---- |
| 低内存 | 即使在高负载下,常驻内存也非常小。 |
| ---- | ---- |
| 热部署 | 可以在不停止服务的情况下,更新配置文件或升级版本。 |
| ---- | ---- |
| 高度模块化 | 可以根据需求自由组合功能模块(如 Gzip 压缩、访问控制等)。 |
反向代理的好处
隐藏后端服务器(安全性)
这是最直接的好处。通过反向代理,后端的应用服务器(如 Tomcat, Node.js, Python)不需要直接暴露在公网中。
-
隐藏 IP: 攻击者只能看到 Nginx 的 IP,无法直接攻击存储数据的后端服务器。
-
统一防火墙: 你可以在 Nginx 层统一拦截恶意请求、设置黑名单或限制访问频率(Rate Limiting)。
负载均衡 (Load Balancing)
如果你的网站流量很大,一台服务器扛不住,你可以部署多台。
-
流量分发: Nginx 接收所有请求,并根据算法(如轮询、最少连接数)将请求平摊给后端的几台服务器。
-
高可用性: 如果某台后端服务器宕机了,Nginx 会自动识别并跳过它,将请求发给健康的服务器,保证业务不中断。
SSL/TLS 卸载 (HTTPS 加速)
处理 HTTPS 的加密和解密是非常消耗 CPU 资源的。
-
统一管理: 你只需要在 Nginx 上配置一次 SSL 证书。
-
性能提升: Nginx 负责解密 HTTPS 请求,然后通过较快的 HTTP 与后端通信。后端服务器只需专注于处理业务逻辑,不再被加密计算拖累。
静态资源缓存与加速
Nginx 处理静态文件(图片、JS、CSS)的能力远强于普通的后端程序。
-
动静分离: Nginx 可以直接返回静态资源,只有动态请求(如登录、查询数据库)才转发给后端。
-
响应速度: 配合缓存机制,Nginx 可以缓存经常被访问的数据,减少后端的重复计算。
灵活的域名与路径映射
-
单 IP 多站点: 你可以用一个公网 IP 承载多个域名(如
a.com和b.com),Nginx 会根据域名将请求分发到不同的本地端口。 -
平滑迁移: 如果你要更换后端技术栈(比如从 PHP 换成 Java),可以在 Nginx 层做路径重写,用户完全感知不到后台的变化。

反向代理配置:
server {
listen 80;
server_name localhost;
# 反向代理:转发给后端应用
location /api/ {
proxy_pass http://localhost:8080/;
}
}
对于后续请求的动态地址,会自动拼接在地址的末端

负载均衡配置:
http {
# 1. 定义服务器组 (upstream)
upstream my_backend_servers {
# 默认算法是轮询 (Round Robin)
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name localhost;
location / {
# 2. 引用定义的服务器组
proxy_pass http://my_backend_servers;
# 3. 转发必要的请求头(保证后端能获取真实客户端信息)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
保持服务器组名字一致

负载均衡是可以调控分配的:

4. Swagger
介绍
- 简单来说,Swagger 是一套围绕 OpenAPI 规范构建的开源工具库。它的核心价值在于:让接口文档不再是程序员手动写的“作文”,而是根据代码自动生成的“说明书”。
使用Swagger的三步:
step1. 先导入knife4j maven坐标
直接使用Swagger比较繁琐,使用knife4j封装了swagger直接导入坐标就可以使用

step2. 在配置类中加入knife4j相关配置 :
@Bean
public Docket docket(){
Apilnfo apilnfo = new ApilnfoBuilder();
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apilnfo(apilnfo)
.select()
//指定生成接口需要扫描的包
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
step3. 设置静态资源映射,否则接口文档页面无法访问

详解放行静态资源方法(重写于父类WebMvcConfigurationSupport)中的形参所调用的两个方法:
firstOperation: addResourceHandler(String pathPattern)
这个方法定义了 “访问入口”(即你在浏览器地址栏输入的路径)。
-
作用:建立一个 URL 映射规则。
-
通俗理解:设置一个“虚假地址”或者“快捷方式”。
-
代码分析:
-
"/doc.html":意味着当你访问http://localhost:8080/doc.html时,触发这个规则。 -
"/webjars/**":意味着凡是请求以/webjars/开头的资源(如插件、图标等),都走这条线。
-
secondOperation. addResourceLocations(String resourceLocation)
这个方法定义了 “物理位置”(即文件真正藏在项目里的哪个地方)。
-
作用:告诉 Spring 资源文件在磁盘或类路径(classpath)下的具体目录。
-
通俗理解:指明“仓库的真实货架位置”。
-
代码分析:
-
"classpath:/META-INF/resources/":这是 Swagger/Knife4j 页面文件(doc.html)在 jar 包中固定的存放路径。 -
"classpath:/META-INF/resources/webjars/":这是存放网页所需的各类 JavaScript、CSS 第三方库的目录。
-
Swagger常用的注解:


浙公网安备 33010602011771号