一、Nginx 核心功能清单(一句话定位)
功能
解决什么问题
典型应用
静态资源服务
后端不处理图片/CSS/JS,直接由 Nginx 硬盘读取
官网、博客、前端打包产物
反向代理
隐藏后端真实 IP/端口,统一入口转发请求
Node/Java/Python 服务不暴露公网
负载均衡
多台后端分摊流量,故障自动剔除
高并发 API、微服务网关
HTTPS 终端
集中管理 SSL 证书,后端走 HTTP 减负
全站加密、HSTS 安全策略
前端路由兼容
解决 Vue/React 历史模式刷新 404
单页应用(SPA)部署
限流与安全
防刷接口、防盗链、IP 黑白名单
API 网关前置、防爬虫
二、6大功能详解 + 完整配置片段🟢 功能1:静态资源服务 + 强缓存控制1234567# 放在 server 块内location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|woff|ttf)$ { root /var/www/static; ...
一、配置文件的“语法格式”与“书写铁律”Nginx 配置是声明式、层级化的文本,不是编程语言。掌握 3 条铁律即可避开 90% 的语法错误:
规则
说明
正确示例
错误示例
指令以 ; 结尾
所有单行指令必须加分号,漏写直接 nginx -t 报错
gzip on;
gzip on
块指令用 {} 包裹
块本身不加分号,内部指令逐行写
http { ... }
http { ... };
注释用 #
仅支持单行注释,不支持 /* */
# 这是注释
/* 注释 */
📌 核心概念:上下文(Context)每个指令都有生效范围,不能随意乱放。例如 listen 只能写在 server 块里,写在 http 或 location 块里会直接报错。Nginx 启动时会按层级合并配置。
二、Nginx 配置的 6 大上下文(层级结构)配置文件像一棵树,从上到下依次是:
1234567main(全局) └─ events(网络连接) └─ http(HTTP协议) ├─ upstream(后端服务器 ...
go-zero
未读.api 文件是 go-zero 的核心契约文件,采用自定义 DSL(领域特定语言)语法。它不依赖 Go 语法,而是以声明式方式定义 HTTP 路由、数据结构、参数校验、鉴权与中间件。goctl 解析该文件后,自动生成路由注册、参数绑定、类型定义等样板代码。
下面按日常开发顺序,系统讲解 .api 语法。
📐 一、完整结构模板12345678910111213141516171819syntax = "v1"info ( title: "商品服务" desc: "管理商品上下架与查询" author: "dev" email: "dev@example.com" version: "v1.0.0")// 1. 类型定义区type ...// 2. 路由与服务定义区@server (...)service product-api { @handler CreateProduct post /api/v1/products (C ...
go专题
未读swag🌍 English ∙ 简体中文
Swag 将 Go 的注释转换为 Swagger2.0 文档。我们为流行的 Go Web Framework 创建了各种插件,这样可以与现有 Go 项目快速集成(使用 Swagger UI)。
目录
快速开始
支持的 Web 框架
如何与 Gin 集成
格式化说明
开发现状
声明式注释格式
通用 API 信息
API 操作
安全性
样例
多行的描述
用户自定义的具有数组类型的结构
响应对象中的模型组合
在响应中增加头字段
使用多路径参数
结构体的示例值
结构体描述
使用 swaggertype 标签更改字段类型
使用 swaggerignore 标签排除字段
将扩展信息添加到结构字段
对展示的模型重命名
如何使用安全性注释
项目相关
快速开始
将注释添加到 API 源代码中,请参阅声明性注释格式。
使用如下命令下载 swag:
1go install github.com/swaggo/swag/cmd/swag@latest
从源码开始构建的话,需要有 Go 环境(1.19 及以上版本)。
或者从 github 的 r ...
OpenSSL 深度实战指南
1. 核心概念与文件后缀在使用命令之前,必须理解 OpenSSL 操作的对象是什么。
后缀
全称
含义
内容
.key
Private Key
私钥
包含私有密钥信息,绝密,用于解密或签名。
.csr
Certificate Signing Request
证书签名请求
包含公钥和身份信息(CN, O 等),发送给 CA 进行签名。
.crt / .pem
Certificate
证书
包含公钥、身份信息、CA 的签名、有效期等。通常是 PEM 编码。
.der
Distinguished Encoding Rules
二进制证书
证书的二进制格式,无法直接用文本编辑器查看。
.pfx / .pkcs12
PKCS#12
证书包
包含证书链和私钥的加密打包文件,常用于 Windows/IIS/Java。
.cnf / .conf
Configuration
配置文件
定义 OpenSSL 行为、扩展属性(如 SAN)的文件。
注意:.pem 是一种编码格式(Base64 ...
第一部分:gRPC 的四种通信模式(通俗版)在写代码之前,我们必须先理解 gRPC 支持的四种“对话方式”。你可以把它们想象成人与人之间的交流:
模式
英文名
通俗比喻
数据流向
适用场景
1. 一元调用
Unary RPC
问答题客户端问一个问题,服务端答一个结果。
1 请求 → 1 响应
最常用。如:用户登录、查询余额。
2. 服务端流
Server Streaming RPC
看直播客户端点个播放,服务端源源不断发数据。
1 请求 → N 响应
如:股票行情推送、日志实时流。
3. 客户端流
Client Streaming RPC
传文件客户端分块发数据,发完后服务端给个结果。
N 请求 → 1 响应
如:大文件上传、批量数据导入。
4. 双向流
Bidirectional Streaming RPC
打电话双方随时可以说话,互不阻塞。
N 请求 ↔ N 响应
如:在线聊天室、游戏实时同步。
第二部分:环境准备(只需一次)在开始之前,请确保你的电脑安装了 Go 语言 和 Protobuf 编译器。
安装 Go 插件(用于生成 Go 代码):
12 ...
gorm
未读一、什么时候要用 Model?✅ 必须使用 Model 的场景
更新操作时
12345// ✅ 必须用 Model 指定要更新的表DB.Model(&User{}).Where("name = ?", "张三").Update("age", 26)// ❌ 错误:不知道要更新哪个表DB.Where("name = ?", "张三").Update("age", 26)
只想指定表名,不需要查询结果时
123456// 只指定表,进行聚合查询var count int64DB.Model(&User{}).Where("age > ?", 18).Count(&count)// 联合查询时指定主表DB.Model(&User{}).Joins("Profile").Find(&users)
使用 Updates 更 ...
grpc
未读gRPC 虽然性能强大,但它使用 HTTP/2 和 Protobuf(二进制) 协议。这导致了一个大问题:浏览器、Postman、前端 JavaScript 无法直接调用 gRPC 接口。
gRPC Gateway 就是为了解决这个问题而生的。
第一部分:什么是 gRPC Gateway?(通俗版)想象你开了一家高档餐厅(gRPC 服务):
内部厨房:只说“专业术语”(Protobuf),只用“内部对讲机”(HTTP/2)。效率高,但外人听不懂。
外部顾客:说“大众语言”(JSON),用“手机点餐”(HTTP/1.1)。
gRPC Gateway 就是“服务员/翻译官”:
顾客发 HTTP/JSON 请求给 Gateway。
Gateway 把 JSON 翻译成 Protobuf,把 HTTP 转成 gRPC。
Gateway 发给 gRPC 服务。
拿到结果后,再翻译回 JSON 给顾客。
核心价值:
对外:提供标准的 RESTful HTTP/JSON 接口(兼容浏览器、移动端)。
对内:微服务之间依然用高效的 ...
gRPC Metadata(元数据) 是 gRPC 通信中非常关键的概念。如果说 Protobuf 消息是信件内容,那么 Metadata 就是信封上的信息(如:寄件人、收件人、加急标记、邮戳)。
它主要用于传递 非业务数据,例如:认证 Token、链路追踪 ID、语言设置、请求来源等。
第一部分:核心概念(通俗版)
**键值对 (Key-Value)**:Metadata 本质是 map[string][]string。
Key:必须是 ASCII 小写字符(如 authorization, user-id)。
Value:是字符串切片 []string。这意味着一个 Key 可以对应多个 Value。
绑定 Context:Metadata 不能单独发送,必须附着在 context.Context 上。
方向性:
**Outgoing (发出)**:客户端发给服务端,或服务端回给客户端。
**Incoming (接收)**:服务端收到客户端的,或客户端收到服务端的。
特殊后缀:如果 Key 以 -bin 结尾(如 token-bin),表示这是二进制数据,gRPC 会自动 ...
如果把 gRPC 服务比作一家公司,业务逻辑是员工,那么拦截器就是前台、保安和审计员。
保安(认证拦截器):检查你有没有工牌(Token),没工牌不让进。
审计员(日志拦截器):记录谁在什么时候进了哪个房间,待了多久。
前台(熔断/限流):人太多了,先在外面排队。
拦截器的核心优势是:业务代码不需要关心这些杂事,拦截器统一处理。
下面我将通过 3 个循序渐进的 Demo,带你彻底掌握 gRPC 拦截器。
第一部分:前置准备为了专注讲解拦截器,我们简化 Proto 文件。
1. 定义 Proto (proto/auth.proto)123456789syntax = "proto3";package auth;message PingRequest { string msg = 1; }message PingResponse { string msg = 1; }service AuthService { rpc Ping (PingRequest) returns (PingResponse);& ...


