william.chan's blog

done is better than perfect

nestjs Nginx 实现灰度系统-多租户和非多租户

手把手教你搭建平滑过渡的灰度环境

灰度发布(又称金丝雀发布)是服务发布平滑过渡的重要手段。它可以在不中断核心业务的情况下,让部分用户先体验到新版本。如果有问题也能快速回滚,将影响面控制在最小。 今天我们来看一下,如何使用 Nginx 分别在非多租户(单租户)场景和多租户场景中实现一套优雅的灰度系统。 什么是灰度发布? 简单来说,灰度发布就是: 部署了新版本(V2),并保留老版本(V1)。 当流量进入 Nginx 网...

nestjs Nginx 核心用法

静态资源托管与反向代理负载均衡

在后端及大前端部署架构中,Nginx 一直扮演着举足轻重的角色。本文将带你通过 Docker 快速上手 Nginx,并深入掌握它的两大核心用法:静态资源托管与动态资源的反向代理及负载均衡。 一、配置与基础目录结构(基于 Docker) 我们通常通过 Docker 来快速拉起 Nginx 服务器: 1 docker run -d -p 80:80 --name my-nginx ngin...

nestjs passport-github2 实现Github第三方登录

在现代 Web 网站中,提供第三方 OAuth 登录(如 GitHub、Google、微信)可以极大降低用户注册的门槛。本篇文章将带你在 NestJS 中,利用 passport-github2 策略,实现标准的 GitHub OAuth2.0 授权登录流程。 准备工作:申请 GitHub OAuth App 在开始写代码之前,你需要去 GitHub 申请一个 OAuth Applica...

nestjs jwt access_token & refresh_token

双 token 实现登录鉴权

在现代 Web 应用的鉴权体系中,基于 JWT(JSON Web Token)的双 Token 机制(access_token 提供端点访问权限,refresh_token 负责无感刷新)是最常用的业界标准方案之一。 本文将带你在 NestJS 中,从 DTO 设计到双策略校验,一步步实现这套安全、可靠的双 Token 登录鉴权方案。 为什么需要双 Token? Access T...

nestjs 基于 RBAC 实现权限控制

RBAC(Role Based Access Control)基于角色的权限控制

RBAC(Role-Based Access Control,基于角色的访问控制)是业界最广泛使用的权限管理模型。本文将带你在 NestJS 中,从 DTO 设计到装饰器、守卫(Guard)的开发,一步步实现标准的 RBAC 权限控制。 RBAC 核心概念 在标准 RBAC 模型中,权限与角色相关联,用户通过成为适当角色的成员而得到对应的权限。其核心关系如下: User(用户):...

nestjs 基于ACL实现权限控制

ACL(Access Control List)访问控制列表

在后台管理系统中,权限控制是必不可少的一环。常见的权限模型有 RBAC(基于角色的访问控制)、ABAC(基于属性的访问控制)以及 ACL(访问控制列表)。 本文将带你一步步使用 NestJS 的核心特性(装饰器 Decorator 和 守卫 Guard)来实现一个基础的 ACL 权限控制系统。 1. 明确实现思路 在 NestJS 中,实现权限控制的推荐做法是: 认证(Auth...

nestjs 保存登录状态 JWT

原理解释,问题和解决方案

在前后端分离和微服务架构盛行的当下,JWT(JSON Web Token)成为了最流行的跨域认证解决方案。相较于传统的 Session + Cookie,JWT 带来了一种无状态的登录保持方案。 JWT 原理简介 与传统 Session 在服务端内存或 Redis 中保存用户状态不同,JWT 把用户基本状态信息(如用户 ID、角色、过期时间等)直接保存在客户端。 一个 JWT 字符串由...

nestjs 保存登录状态 session + cookie

原理解释,问题和解决方案

原理简介 HTTP 协议是无状态的,这意味着每次客户端发起的请求,服务端都不知道这个客户端以前发过什么请求。为了能够在多个请求之间保持用户的状态(如登录状态),我们最常用的方案之一就是 Session + Cookie。 Cookie:存在于客户端(浏览器),每次发送请求时会自动携带对应域名下的 Cookie 传递给服务端。 Session:存在于服务端。服务端生成一个唯一的标...

nestjs 快速掌握 Redis

在本文中,我们将探讨如何在 NestJS 项目中快速集成和使用 Redis。无论是作为缓存、消息代理(Pub/Sub)还是实现分布式锁,Redis 都是现代微服务架构中不可或缺的利器。 为什么在 NestJS 中使用 Redis? 高性能缓存:大幅减少数据库查询负担,提高响应速度。 状态共享:在分布式系统或集群部署中共享 Session、Token 等状态。 消息队列 / ...

nestjs 快速掌握 TypeORM

深入图解 TypeORM 核心架构:DataSource、EntityManager 与 Repository

在 NestJS 开发中,TypeORM 是最常被使用的 ORM(对象关系映射)框架。学习 TypeORM 最初的门槛,往往是理不清它里面那几个长得很像的核心类。 本文将结合开局的架构思想图关系,为你彻底梳理清楚 DataSource、EntityManager、Repository 以及 Entity 之间的运作流转逻辑。 1. 核心架构层级解析 在开始讲解每个对象之前,我们先通...