第一天

1. 技术选型

image

2. 熟悉后端框架

image

每一个模块作用:
image

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

前端login请求路径:
image

后端login请求路径:
image
image
image

显然二者并不相同。

所以到底前端是如何请求到后端路径的呢?

  • 答案是: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,提高安全性。

反向代理示意图:
image
负载均衡 (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.comb.com),Nginx 会根据域名将请求分发到不同的本地端口。

  • 平滑迁移: 如果你要更换后端技术栈(比如从 PHP 换成 Java),可以在 Nginx 层做路径重写,用户完全感知不到后台的变化。

image

反向代理配置:

server {
    listen       80;
    server_name  localhost;

    # 反向代理:转发给后端应用
    location /api/ {
        proxy_pass http://localhost:8080/;
    }
}

对于后续请求的动态地址,会自动拼接在地址的末端
image

负载均衡配置:

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;
        }
    }
}

保持服务器组名字一致
image

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

image

4. Swagger

介绍

  • 简单来说,Swagger 是一套围绕 OpenAPI 规范构建的开源工具库。它的核心价值在于:让接口文档不再是程序员手动写的“作文”,而是根据代码自动生成的“说明书”。

使用Swagger的三步:
step1. 先导入knife4j maven坐标

直接使用Swagger比较繁琐,使用knife4j封装了swagger直接导入坐标就可以使用
image

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. 设置静态资源映射,否则接口文档页面无法访问
image

详解放行静态资源方法(重写于父类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常用的注解:
image

posted @ 2026-03-13 00:23  QinGutaOo0  阅读(20)  评论(0)    收藏  举报