Nginx参数配置-笔记

文章目录

  • 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.mzph.cn/bicheng/61390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32学习笔记----UART、IIC、SPI的区别

在STM32微控制器中,UART(通用异步收发传输器)、I2C(串行外设接口)和SPI(串行外设接口)是三种常见的通信协议。它们各自有不同的用途、特性和工作方式。它们的基本区别在于通信协议、数据传输方式…

Go小记:使用Go实现ssh客户端

一、前言 SSH(Secure Shell)是一种用于在不安全网络上安全访问远程计算机的网络协议。它通过加密的方式提供远程登录会话和其他网络服务,保证通信的安全性和数据的完整性。 本文使用golang.org/x/crypto/ssh包来实现SSH客户端 可以通过go …

html中select标签的选项携带多个值

搜索参考资料&#xff1a;SELECT标签中的选项可以携带多个值吗&#xff1f; 【摘抄】&#xff1a; 它可能有一个select选项中的多个值&#xff0c;如下所示。 <select id"ddlEmployee" class"form-control"> <option value"">-- S…

oracle导入线上数据的全步骤

多租户架构允许oracle数据库成为一个多租户的容器数据库&#xff0c;也就是CDB&#xff0c;container database&#xff0c;与之相对应的&#xff0c;则是插入到这个容器里面的可插拔式数据库&#xff0c;pluggable database 一个CDB可以包含0&#xff0c;1或者多个用户创建的…

华为刷题笔记--题目索引

文章目录 更多关于刷题的内容欢迎订阅我的专栏华为刷题笔记简单题目 更多关于刷题的内容欢迎订阅我的专栏华为刷题笔记 该专栏题目包含两部分&#xff1a; 100 分值部分题目 200 分值部分题目 所有题目都会陆续更新&#xff0c;订阅防丢失 简单题目 –题目分值试卷1华为OD机…

从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改

在 sophpi 中&#xff0c;默认网卡 eth0 的 MAC 地址未配置&#xff0c;是随机生成的。这样就会导致每次重启之后&#xff0c;MAC 地址会改变&#xff0c;从而导致通过 DHCP 获取 IP 地址每次也都在变化。 查看 MAC 地址 前文提到 eth0 自动使能并通过 DHCP 获取 IP 地址&…

网络安全领域的最新动态和漏洞信息

网络安全领域的最新动态和漏洞信息涉及多个方面&#xff0c;以下是对这些信息的详细归纳&#xff1a; 一、网络安全领域最新动态世界互联网大会乌镇峰会召开2024年11月19日至22日&#xff0c;以“拥抱以人为本、智能向善的数字未来——携手构建网络空间命运共同体”为主题的202…

vue中el-select 模糊查询下拉两种方式

第一种&#xff1a;先获取所有下拉数据再模糊查询&#xff0c;效果如下 1&#xff0c;页面代码&#xff1a;speciesList是种类列表List, speciesId 是speciesList里面对应的id&#xff0c;filterable是过滤查询标签 <el-form-item label"种类" prop"species…

华为数字化转型的本质为何是管理变革

随着全球经济的加速数字化转型&#xff0c;企业纷纷进入了数字化时代的大潮。华为作为数字化转型的领军者&#xff0c;已经成功实践了从传统企业向数字化企业的蜕变。对于企业而言&#xff0c;数字化转型不仅仅是新技术的应用&#xff0c;更是一场管理变革。在这场变革的背后&a…

【Linux从青铜到王者】详解ip协议(待完善)

前言 之前我们讲的udp和tcp协议&#xff0c;是处于传输层的协议 而ip协议&#xff0c;是处于传输层下面的网络层的协议 一个报文传输的时候&#xff0c;表面上是一个主机的传输层运输到另一个主机的传输层&#xff0c;本质是其实是由应用层不断向下交付到数据链路层&#xff…

pytorch奇怪错误

ValueError: At least one stride in the given numpy array is negative, and tensors with negative strides are not currently supported. (You can probably work around this by making a copy of your array with array.copy().) 今天在这里遇到了一个奇怪的bug impor…

go-zero(二) api语法和goctl应用

go-zero api语法和goctl应用 在实际开发中&#xff0c;我们更倾向于使用 goctl 来快速生成代码。 goctl 可以根据 api快速生成代码模板&#xff0c;包括模型、逻辑、处理器、路由等&#xff0c;大幅提高开发效率。 一、构建api demo 现在我们通过 goctl 创建一个最小化的 HT…

集群聊天服务器(12)nginx负载均衡器

目录 负载均衡器nginx负载均衡器优势 如何解决集群聊天服务器跨服务器通信问题&#xff1f;nginx的TCP负载均衡配置nginx配置 负载均衡器 目前最多只能支持2w台客户机进行同时聊天 所以要引入集群&#xff0c;多服务器。 但是客户连哪一台服务器呢&#xff1f;客户并不知道哪一…

Springboot+Vue的项目搭建(二)

三个工具 一、Md5加密工具 MD5加密工具是一款用于数据加密的工具&#xff0c;它采用MD5算法将输入的数据转换成一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash value&#xff09;。以下是对MD5加密工具的详细介绍&#xff1a; MD5&#xff08;Message-Di…

django启动项目报错解决办法

在启动此项目报错&#xff1a; 类似于&#xff1a; django.core.exceptions.ImproperlyConfigured: Requested setting EMOJI_IMG_TAG, but settings are not c启动方式选择django方式启动&#xff0c;以普通python方式启动会报错 2. 这句话提供了对遇到的错误的一个重要线索…

Linux:版本控制器git和调试工具cgdb

✨✨所属专栏&#xff1a;Linux✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 版本控制器 为了能够更⽅便我们管理这些不同版本的⽂件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是能让你了解到⼀个⽂件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀…

Vue3 provide 和 inject的使用

在 Vue 中&#xff0c;provide 和 inject 是 Composition API 的一对功能&#xff0c;用于父子组件之间的依赖注入。它们的作用是让父组件可以向其所有子组件提供数据或方法&#xff0c;而不需要通过逐层传递 props。 1. provide provide 用于父组件中&#xff0c;提供数据或…

C++11——异常

1.异常概念 异常是一种处理错误的方式&#xff0c;当一个函数发现自己无法处理的错误时就会抛出异常&#xff0c;让函数的调用者处理这个错误 throw&#xff1a;当出现问题时&#xff0c;程序会抛出一个异常&#xff0c;通过 throw 来完成catch&#xff1a;catch 关键字捕获异…

Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构

目录 Redis 数据类型 一、String&#xff08;字符串&#xff09; 二、Hash&#xff08;哈希&#xff09; 三、List&#xff08;列表&#xff09; 四、Set&#xff08;集合&#xff09; 五、ZSet(sorted set&#xff1a;有序集合) 六、BitMap 七、HyperLogLog 八、GEO …

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前&#xff0c;5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力&#xff0c;进入5G发展的下半场&#xff0c;5G与AI的融合正推动诸多行业的数字化转型和创新发展&#xff0c;终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…