Nginx参数配置-笔记

ops/2024/11/19 10:14:13/

文章目录

  • upstream实现后台应用服务负载均衡&高可用
  • proxy_set_header参数

upstream实现后台应用服务负载均衡&高可用

角色IP
nginx172.168.110.2
后端应用服务1172.168.110.3
后端应用服务2172.168.110.4
后端应用服务3(备用)172.168.110.5

示例如下:

upstream myservers {server 172.168.110.3:9003 weight=1  max_fails=2  fail_timeout=30;server 172.168.110.4:9003 weight=2  max_fails=2  fail_timeout=30;server 172.168.110.5:9003 backup;
}server {listen 3333;server_name localhost;location / {proxy_pass http://myservers/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}

上面配置解释:
weight:访问权重。如果不配置权重情况下,用户请求默认是轮询访问后端应用服务1、服务2 ,例如10次请求中,5次访问服务1,5次访问服务2。当权重设置1和2后,那么后端应用服务1、服务2的请求访问比例变为1:2。
max_fails=2 fail_timeout=30:在30(fail_timeout)s内,如果某个服务出现2(max_fails)次访问失败,那么在接下来的30s(fail_timeout)s中,不会给将请求转发给该服务。
backup:当upstream中所有服务都访问失败,而进入fail_timeout时,那么此时会将请求转发给配置了backup的备用服务器进行处理。

Nginx实现应用服务高可用原理:假设上面示例中,后台应用服务1挂掉,此时用户发起请求,假设请求刚好落到那台故障的后台应用服务1,此时前端用户是否会看到报错,例如404?答案是否,因为nginx尝试让应用服务1处理请求,发现服务1挂掉(例如发现应用服务的端口不通、连接超时等),不会马上返回错误结果给用户,而是转而让后台应用服务2去处理请求,服务2响应成功后,nginx才会把响应的成功结果响应给用户。故而哪怕服务1出现故障,nginx在收到多次请求时,不会说部分请求能成功,部分请求失败,即对用户来说,是无感的,此方式为nginx upstream的被动检测,即每次收到请求时进行处理时才进行检测,还有一种为主动检测,即nginx定期对后端服务进行检测,这样效率更较高,对用户更友好,大家可以去了解下这块。 当然,要实现真正的应用服务高可用,除了应用服务是多实例,Nginx也必须是集群,而不能是单点。

proxy_set_header参数

具体可参考:https://blog.csdn.net/bao19901210/article/details/52537279

你是否有发现location{}里面的配置,常常带有 proxy_set_header参数,
最常见的有:Host 、X-Real-IP、X-Forwarded-For ,他们有什么作用?

假设我的Nginx服务器地址是172.168.110.100,下面是Nginx的部分配置。

upstream myservers {server 172.168.110.3:9003;server 172.168.110.4:9003;
}server {listen 3333;server_name localhost;location / {# proxy_pass http://myservers/;proxy_pass http://172.168.110.85:9003/;proxy_set_header Host $htt_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
角色IP
用户PC172.168.110.1
nginx172.168.110.2
后端应用服务172.168.110.3

访问流程如下:

  1. 用户(IP:172.168.110.1)访问nginx(IP:172.168.110.2)
  2. nginx(IP:172.168.110.2)访问后台应用服务(IP:172.168.110.3)

proxy_set_header Host $host :用于后台应用服务获取 用户访问本请求时使用的Host。有无设置的区别如下:
有设置:那么后台应用服务通过请求头拿到的“Host”值为172.168.110.2,即用户访问请求URL时使用的URL Host地址。
没有设置:那么后台应用服务拿到的“Host”值为172.168.110.3。即nginx代理服务器访问后台服务时使用的地址,即proxy_pass 参数后面的主机地址。例如你使用的是 proxy_pass http://myservers/,那么后台应用服务拿到的“Host”值为“myservers”。


proxy_set_header X-Real-IP $remote_addr :用于后台应用服务获取 真正的客户端IP地址。有无设置的区别如下:
有设置:那么后台应用服务通过请求头拿到的“x-real-ip”值为172.168.110.1,即用户发起请求所在PC的IP。
没有设置:那么后台应用服务获取不到“x-real-ip”值。


proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for :用于获取请求调用链的IP集合,用于请求转发过程跟踪。调用链IP包括:用户所在IP、进行请求转发nginx ip集合。有无设置的区别如下:
有设置:那么后台应用服务拿到的“x-forwarded-for”值为172.168.110.1。假设一个请求经过了若干次nginx的转发,那么此时X-Forwarded-For值为(用户IP, 第1次nginx转发时nginx的IP, 第2次nginx转发时nginx的IP…, 倒数第2个nginx服务器IP),注:调用链IP集合 不含最后一次nginx转发的nginx的IP。故而上面“x-forwarded-for”值只有用户IP,而不含nginx ip。因为在本次请求转发中,nginx只进行一次转发,即也是最后一次转发,而最后的一次转发没有被记录到“x-forwarded-for”中。。
没有设置:那么后台应用服务获取不到“x-forwarded-for”值。



http://www.ppmy.cn/ops/134931.html

相关文章

spi 回环

///tx 极性0 (sclk信号线空闲时为低电平) /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

ASUS/华硕灵耀X双屏Pro UX8402Z 原厂Win11-22H2系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 ,安装结束后带隐藏分区,一键恢复,以及机器所有驱动软件。 系统版本:windows11 原厂系统下载网址:http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意:仅支持以上型号专用…

node.js知识点总结

1、Node.js Node. js是一个基于 Chrome v8引擎的服务器端 JavaScript运行环境;Node. js是一个事件驱动、非阻塞式I/O的模型,轻量而又高效;Node. js的包管理器npm是全球最大的开源库生态系统。 2、数据处理中的buffer: 具体…

Postman之数据提取

Postman之数据提取 1. 提取请求头\request中的数据2. 提取响应消息\response中的数据3. 通过正在表达式提取4. 提取cookies数据 本文主要讲解利用pm对象对数据进行提取操作,虽然postman工具的页面上也提供了一部分的例子,但是实际使用时不是很全面&#…

ssm135连锁经营商业管理系统+jsp.zip

毕 业 设 计(论 文) 题目:连锁经营商业管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本连锁经营商业…

成本400元,DIY一个高刷新率热成像相机

在市面上开源的热成像作品中,有一部分颜值高,但分辨率太低;也有一部分把分辨率提高了,但使用起来却不太流畅。 基于此,作者本人结合二者的优势,设计了一款热成像相机——LiThermal,成本算下来只…

基于YOLOv8深度学习的无人机视角军事打击目标检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着无人机技术的迅速发展及其在军事领域的广泛应用,精准目标检测逐渐成为现代战场中提升打击效能和战术决策的关键技术之一。无人机因其灵活性、机动性和高效性,已经成为现代战争中不可或缺的侦察与打击工具。在复杂多变的战场环境中,及时、…

使用 IntelliJ IDEA 编写 Spark 应用程序(Scala + Maven)

使用 IntelliJ IDEA 编写 Spark 应用程序(Scala Maven) 本教程演示如何使用 IntelliJ IDEA 和 Maven 编写 Spark 应用程序(以 WordCount 程序为例)。运行环境为 Ubuntu 16.04。 环境准备 安装 IntelliJ IDEA (1&am…