Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解
Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解
- Nginx 反向代理与负载均衡配置,Header 透传到后端应用(参数全解版)
- 一、Nginx 反向代理与负载均衡
- 1. 什么是反向代理
- 2. Upstream 配置与负载均衡策略
- Upstream 的集中配置方式(推荐)
- Upstream 支持的负载均衡策略
- 3. 常见部署场景:公网访问后端应用
- 二、Nginx 配置规范与 Header 透传实践指南
- 1. Nginx 配置文件结构推荐
- 推荐目录结构:
- nginx.conf 示例:
- 2. 在 conf.d 中编写自定义配置
- app1.conf 示例:
- 3. 自定义 Header 命名规范
- 4. Header 透传到后端应用
- 5. 测试 Header 是否透传成功
- 三、Nginx 配置参数详解
- 1. 反向代理基础配置与参数详解
- 2. Upstream 配置详解
- 3. Location 匹配规则详解
Nginx 反向代理与负载均衡配置,Header 透传到后端应用(参数全解版)
本篇文档从 反向代理 和 负载均衡 两个核心维度,全面介绍 Nginx 配置方式,细化到每一个可配置参数、其作用、可选值与推荐实践。
一、Nginx 反向代理与负载均衡
1. 什么是反向代理
反向代理(Reverse Proxy)是 Nginx 最核心的功能之一。客户端请求并不直接访问后端服务,而是通过 Nginx 中转,具备以下优势:
- 安全隔离(隐藏真实后端 IP)
- 请求调度(负载均衡/转发)
- 协议转换(如 HTTPS → HTTP)
- 限流、缓存、熔断等控制能力
示例配置(最简单反向代理):
server {listen 80;server_name www.example.com;location / {proxy_pass http://127.0.0.1:8080;}
}
2. Upstream 配置与负载均衡策略
在大多数生产环境中,后端往往不止一个服务实例,需要将请求合理分发,这就需要使用 Nginx 的 upstream
模块。
Upstream 的集中配置方式(推荐)
upstream backend_app {server 10.0.0.11:8080;server 10.0.0.12:8080;server 10.0.0.13:8080;
}server {listen 80;server_name api.example.com;location / {proxy_pass http://backend_app;}
}
Upstream 支持的负载均衡策略
策略 | 说明 |
---|---|
round-robin (默认) | 轮询,平均分配请求 |
least_conn | 分发到连接最少的服务 |
ip_hash | 同一客户端 IP 始终转发给同一服务器 |
hash $variable | 根据某变量做 hash 分配(需 nginx-upstream-hash 模块) |
示例:ip_hash 保持会话一致性
upstream backend_app {ip_hash;server 10.0.0.11:8080;server 10.0.0.12:8080;
}
3. 常见部署场景:公网访问后端应用
场景描述:
外部访问 www.example.com
,访问请求由 Nginx 接收并反向代理至某个后端服务:
[外部用户浏览器] ──▶ [Nginx网关服务器] ──▶ [后端 SpringBoot 应用]
完整配置样例:
upstream my_app {server 192.168.10.101:8080;server 192.168.10.102:8080;
}server {listen 80;server_name www.example.com;location / {proxy_pass http://my_app;# 反向代理头部设置(建议标准写法)proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 自定义用户上下文透传proxy_set_header X-App-UserId $http_x_app_userid;proxy_set_header X-App-Device-Type $http_x_app_device_type;# 连接超时与读取超时proxy_connect_timeout 5s;proxy_read_timeout 10s;}
}
二、Nginx 配置规范与 Header 透传实践指南
1. Nginx 配置文件结构推荐
在大型项目中,我们强烈建议使用模块化配置管理方式:
推荐目录结构:
/nginx/
├── conf/
│ ├── nginx.conf # 主配置文件,负责引入其他配置
│ └── conf.d/ # 子配置文件
│ ├── default.conf # 默认虚拟主机
│ ├── app1.conf # 自定义业务配置1
│ └── app2.conf # 自定义业务配置2
nginx.conf 示例:
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;keepalive_timeout 65;# 🔽 引入业务配置include /nginx/conf.d/*.conf;
}
2. 在 conf.d 中编写自定义配置
app1.conf 示例:
server {listen 80;server_name app1.example.com;location / {proxy_pass http://backend_app1;# 设置超时时间proxy_connect_timeout 3s;proxy_read_timeout 10s;# 透传 Host 头proxy_set_header Host $host;# 透传真实 IPproxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 透传用户代理proxy_set_header User-Agent $http_user_agent;# 自定义 Header 示例(透传用户ID)proxy_set_header X-User-Id $http_x_user_id;}# 健康检查或静态文件可在此配置location /health {return 200 'ok';add_header Content-Type text/plain;}
}
3. 自定义 Header 命名规范
为了保持系统整洁、避免命名冲突,自定义 Header 推荐使用统一前缀,例如:X-App-
或 X-Project-
,具体建议如下:
用途 | Header 示例 | 说明 |
---|---|---|
用户标识 | X-App-UserId | 用户唯一标识 |
设备类型 | X-App-Device-Type | mobile / pc / tablet 等 |
请求来源 | X-App-Source | 来源区分,如 app、web 等 |
语言标识 | X-App-Lang | 如 zh-CN / en-US |
统一使用中划线连接,首字母大写,避免使用下划线(Nginx中设置请求头不能正确识别下划线)。
4. Header 透传到后端应用
前提:Nginx 中使用 proxy_set_header
显式设置,如:
proxy_set_header X-App-UserId $http_x_app_userid;
$http_x_app_userid
这个变量表示客户端请求中的某个 HTTP 请求头(header),其中 <header_name>
是 全部小写,所有中划线 -
替换为下划线 _
的形式。
后端读取方式(以 Java 为例):
String userId = request.getHeader("X-App-UserId");
注意 Header 名区分大小写敏感与否根据语言不同略有差异。
5. 测试 Header 是否透传成功
你可以使用工具如 curl 进行测试:
curl -H "X-App-UserId: 12345" http://app1.example.com/test
观察后端日志是否能成功接收到 X-App-UserId
这个 Header。
三、Nginx 配置参数详解
1. 反向代理基础配置与参数详解
location /api/ {proxy_pass http://backend_service/;# 标准反代头部设置proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 自定义头部示例proxy_set_header X-Work-No $http_x_work_no;proxy_connect_timeout 5s;proxy_read_timeout 10s;
}
参数说明:
指令 | 作用 | 示例值 / 类型 | 说明 |
---|---|---|---|
proxy_pass | 设置反向代理地址 | http://backend/ | 加斜杠表示替换路径前缀,不加斜杠保留请求路径 |
proxy_set_header | 设置透传头部 | $host, $remote_addr, $http_x_xxx | 传递客户端信息、自定义信息到后端 |
proxy_connect_timeout | 连接后端超时时间 | 5s | 超时失败将返回 504 |
proxy_read_timeout | 后端响应超时时间 | 10s | 读取响应超过时间将失败 |
proxy_send_timeout | 向后端发送请求超时 | 10s | 默认为 60s |
proxy_pass 加不加斜杠的区别:
- 加斜杠
/
:去除 location 匹配部分location /service/ {proxy_pass http://app/; # 请求 /service/test → /test }
- 不加斜杠:
location /service/ {proxy_pass http://app; # 请求 /service/test → /service/test }
2. Upstream 配置详解
示例:
upstream znrpt_backend {least_conn;server 10.218.0.3:19090 max_fails=3 fail_timeout=10s;server 10.218.0.4:19090 backup;
}
参数 | 说明 | 可选值 |
---|---|---|
least_conn | 将请求转发给连接最少的服务器 | N/A |
server | 指定上游服务器 | IP:PORT |
max_fails | 最大失败次数,超过则标记为不可用 | 整数(默认1) |
fail_timeout | 设置不可用的持续时间 | 秒数,如 10s |
backup | 备用服务器,仅主服务器全部失效时启用 | 无参数值 |
3. Location 匹配规则详解
常用匹配方式:
类型 | 示例 | 含义 |
---|---|---|
精确匹配 | location = /login | 仅匹配 /login |
前缀匹配 | location /api/ | 匹配 /api/xxx |
正则匹配 | location ~* \.php$ | 匹配所有 .php 结尾请求 |
建议前缀匹配中使用统一命名,如:
location /xxapp_backend/ {proxy_pass http://xxapp_backend/;
}
相关文章:
Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解
Nginx 配置参数全解版:Nginx 反向代理与负载均衡;Nginx 配置规范与 Header 透传实践指南;Nginx 配置参数详解 Nginx 反向代理与负载均衡配置,Header 透传到后端应用(参数全解版)一、Nginx 反向代理与负载均…...

Python常用的第三方模块之【pymysql库】操作数据库
pymysql是在Python3.x版本中用于连接MySQL服务器的一个实现库,Python2中则是使用musqldb。 PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,它允许我们直接在 Python 中执行 SQL 语句并与 MySQL 数据库进行交互。下面我们将详细介绍如何使用 PyMySQL 进…...

【Python数据分析】Pandas模块之pd.concat 函数
💭 写在前面:合并多个数据框,收集各种数据,并将其合并为一个数据框进行分析。本章我们介绍 Pandas 库中数据框合并的函数 —— concat。 0x00 引入:数据框的合并操作 合并多个数据框:收集各种数据,并将其合并为一个数据框进行分析。 下面介绍一些常用的 Pandas 库中数…...
矫平机深度解析:操作实务、行业标准与智能化升级
一、精细操作指南:不同材料的矫平参数设定 1. 常见金属矫平参数参考表 材料类型 厚度范围(mm) 辊缝初始值(mm) 矫平速度(m/min) 压力系数(k值) 低碳钢(…...
【高频考点精讲】CSS accent-color属性:如何快速自定义表单控件的颜色?
用CSS accent-color属性3分钟搞定表单控件换肤,原来这么简单! 前几天有个学员问我,checkbox和radio这些表单控件默认样式太丑了,有没有什么办法能快速改颜色?" 我一看这问题就乐了——这不正是CSS accent-color属性的拿手好戏吗?今天咱们就来好好聊聊这个被低估的C…...

C# 综合示例 库存管理系统7 主界面(FormMain)
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 图99A-22 主界面窗口设计 主界面是多文档界面容器,需要将窗体属性IsMdiContainer设置为True。关于多文档界面编程请参看教程第7.12节《多文档界面》。 主界面并不提…...
vue项目中axios统一或单独控制接口请求时间
先说统一 这里将请求时间统一控制在12秒 // 使用由库提供的配置的默认值来创建实例 // 此时超时配置的默认值是 0 const axiosInstance axios.create()// 覆写库的超时默认值 // 现在,在超时前,所有请求时间统一控制在10秒 axiosInstance.defaults.ti…...
Codeforces Round 1020 (Div. 3) A-D
A. Dr. TC https://codeforces.com/contest/2106/problem/A 题目大意: 对输入字符串每个位置字符依次翻转(1->0 , 0->1) 比如: 101 001 翻转位置1 111 2 100 3 题解: 观察数学特征:ansn…...

系统思考:看清问题背后的结构
组织的挑战,往往不是因为不努力,而是“看不清” 结束了为期两天系统思考课程的第一天,被学员的全情投入深深打动。我们用系统结构图,一步步揭示那些表面看起来“习以为常”的问题: 什么原因跨部门协作总是磕磕绊绊&am…...
netlist
在电子设计自动化(EDA)中,网表(Netlist) 是描述电路设计连接关系的核心数据结构,本质上是电路元件(如逻辑门、晶体管、模块)及其互连关系的 文本化或结构化表示。它是从抽象设计&…...
如何实现Android屏幕和音频采集并启动RTSP服务?
技术背景 在移动直播和视频监控领域,实现高效的屏幕和音频采集并提供流媒体服务是关键技术之一。本文将详细介绍如何基于大牛直播SDK实现Android屏幕和麦克风/扬声器采集,并启动轻量级RTSP服务以对外提供拉流的RTSP URL。在Android平台上,轻…...

Langchain_Agent+数据库
本处使用Agent数据库,可以直接执行SQL语句。可以多次循环查询问题 前文通过chain去联系数据库并进行操作; 通过链的不断内嵌组合,生成SQL在执行SQL再返回。 初始化 import os from operator import itemgetterimport bs4 from langchain.ch…...

QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码
(1) (2)本类的继承关系如下,所以说分隔条属于容器: (3)本类的属性: (4) 这是一份 QSplitter 的举例代码,注意其构造函数时候的传参&am…...

Huffman(哈夫曼)解/压缩算法实现
一、文件压缩 哈夫曼压缩算法需要对输入的文件,逐字节扫描,统计出不同字节出现的数量(频率),根据的得到的频率生成一组叶子节点,这些节点存储着<字节信息>和<频率>,通常需要按频率排序后存储在…...

迭代器模式:统一数据遍历方式的设计模式
迭代器模式:统一数据遍历方式的设计模式 一、模式核心:将数据遍历逻辑与数据结构解耦 在软件开发中,不同的数据结构(如数组、链表、集合)有不同的遍历方式。如果客户端直接依赖这些数据结构的内部实现来遍历元素&…...
Oracle_开启归档日志和重做日志
在Oracle中,类似于MySQL的binlog的机制是归档日志(Archive Log)和重做日志(Redo Log) 查询归档日志状态 SELECT log_mode FROM v$database; – 输出示例: – LOG_MODE – ARCHIVELOG (表示已开启) – NO…...

LeetCode每日一题4.23
题目 问题分析 计算每个数字的数位和:对于从 1 到 n 的每个整数,计算其十进制表示下的数位和。 分组:将数位和相等的数字放到同一个组中。 统计每个组的数字数目:统计每个组中有多少个数字。 找到并列最多的组:返回数…...
线性代数-矩阵的秩
矩阵的秩(Rank)是线性代数中的一个重要概念,表示矩阵中线性无关的行(或列)的最大数量。它反映了矩阵所包含的“有效信息”的维度,是矩阵的核心特征之一。 直观理解 行秩与列秩: 行秩࿱…...

RunnerGo API性能测试实战与高并发调优
API 性能测试通过模拟不同负载场景,量化评估 API 的响应时间、吞吐量、稳定性、可扩展性等性能指标,关注其在正常、高峰甚至极限负载下的表现。这有助于确保 API 稳定高效地运行,为调用者提供优质服务。 接下来,我们借助 RunnerG…...

STM32——相关软件安装
本文是根据江协科技提供的教学视频所写,旨在便于日后复习,同时供学习嵌入式的朋友们参考,文中涉及到的所有资料也均来源于江协科技(资料下载)。 Keil5 MDK安装 1.安装Keil5 MDK2.安装器件支持包方法一:离线…...

数据结构入门【算法复杂度】超详解深度解析
🌟 复杂度分析的底层逻辑 复杂度是算法的"DNA",它揭示了两个核心问题: 数据规模(n)增长时,资源消耗如何变化? 不同算法在极端情况下的性能差异有多大? 数学本质解析 复杂度函数 T(n)O(f(n))…...

java多线程(7.0)
目录 编辑 定时器 定时器的使用 三.定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 定时器 定时器是软件开发中的一个重要组件. 类似于一个 "闹钟". 达到一个设定的时间之后, 就执行某个指定好的…...

Long类型封装Json传输时精度丢失问题
在信息做传输时,经常会使用到类型转换,这个时候因为一些问题会导致精度的丢失。在支付业务中这种问题更为致命。 这里我主动生成一个支付订单并将相关信息使用base64编码为一个二维码返回给前端进行支付,前端进行支付时我通过回调方法发现回调…...

《从GPT崛起,看AI重塑世界》
《从GPT崛起,看AI重塑世界》 GPT 诞生:AI 领域的震撼弹 2022 年 11 月 30 日,OpenAI 发布了一款名为 ChatGPT 的人工智能聊天机器人程序,宛如一颗重磅炸弹投入了平静的湖面,迅速在全球范围内引发了轩然大波,成为了科技领域乃至大众舆论场中最热门的话题之一。一时间,无…...

系统架构-安全架构设计
概述 对于信息系统来说,威胁有:物理环境(最基础)、通信链路、网络系统、操作系统、应用系统、管理系统 物理安全:系统所用设备的威胁,如自然灾害、电源故障通信链路安全:在传输线路上安装窃听…...
基于大语言模型的AI智能体开发:构建具备工具使用能力的智能助手
本文将结合大语言模型(LLM)与工具调用能力,构建新一代AI智能体系统。通过ReAct框架实现智能思考-行动循环,集成网络搜索、计算器、API调用等外部工具,并基于LangChain实现可扩展的智能体架构。 一、新一代AI智能体技术…...

鼠标指定范围内随机点击
鼠标指定范围内随机点击 点赞神器 将鼠标移动到相应位置后按F5 F6键,设置点击范围, F8开始,ESC中止。 有些直播有点赞限制,例如某音,每小时限制3千次,可以设置1200毫秒,3000次。 软件截图&#…...

HashSet 概述
1. HashSet 概述 HashSet 是 Java 集合框架中 Set 接口的一个实现类,它存储唯一元素,即集合中不会有重复的元素。HashSet 基于哈希表(实际上是 HashMap 实例)来实现,不保证元素的顺序,并且允许存储 null 元…...

遥测终端机,推动灌区流量监测向数据驱动跃迁
灌区范围那么大,每一滴水怎么流都关系到粮食够不够吃,还有生态能不能平衡。过去靠人工巡查、测量,就像拿着算盘想算明白大数据,根本满足不了现在水利管理的高要求。遥测终端机一出现,就像给灌区流量监测安上了智能感知…...

蓝耘平台介绍:算力赋能AI创新的智算云平台
一、蓝耘平台是什么 蓝耘智算云(LY Cloud)是蓝耘科技打造的现代化GPU算力云服务平台,深度整合自研DS满血版大模型技术与分布式算力调度能力,形成"模型算力"双轮驱动的技术生态。平台核心优势如下: 平台定位…...