Nginx反向代理与负载均衡与504错误

news2024/11/30 12:36:20

Nginx反向代理与负载均衡概念简介

关于代理

什么是代理

类似中介
在这里插入图片描述
在没有代理模式的情况下,客户端和Nginx服务端,都是客户端直接请求服务端,服务端直接响应客户端。

那么在互联网请求里面,客户端往往无法直接向服务端发起请求,那么就需要用到代理服务,来实现客户端和服务通信,如下图所示。
在这里插入图片描述
按照应用场景模式进行总结,代理可分为正向代理、反向代理,区别在于两者服务对象不同。

正向代理:代理的对象是客户端,为客户端服务

例如:VPN翻墙:VPN代理你的电脑去访问国外的网站

在这里插入图片描述
反向代理:对象是服务端,为服务端服务

一般出现在公司架构中(代理服务端)
在这里插入图片描述
反向代理与负载均衡概念简介

严格来说,Nginx 仅仅是作为 Nginx Proxy 反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果,所以称之为 Nginx 负载均衡。那么,反向代理和负载均衡有什么区别呢?

普通负载均衡软件,如大名鼎鼎的 LVS,其实现的功能只是对请求数据包的转发(也可能会改写数据包)、传递,其中DR模式明显的特征是:从负载均衡下面的节点服务器来看,接收到的请求还是来自访问负载均衡器的客户端的真实用户。

而反向代理就不一样了,反向代理按收访问用户的请求后,会代理用户重新向代理下的节点服务器发起请求,最后把数据返回给客户端用户,在节点服务器看来,访问节点服务器的客户端用户就是反向代理服务器了,而非真实的网站访问用户。

一言以蔽之,LVS 等的负载均衡是转发用户请求的数据包,而 Nginx 反向代理是接收用户的请求然后重新发起请求去请求其后面的节点。

实现nginx负载均衡的组件
Nginx实现负载均衡的组件主要有两个。一个是proxy模块,还有一个是upstream模块ngx_http_upstream_module,这是nginx实现负载均衡的核心组件。它支持的代理方式包括proxy_pass、fastcgi_pass等。
在这里插入图片描述

504大部分是读取超时导致的,那么有什么办法能缓解呢?可以在调用端或proxy上进行重试,比如第一次读取超时是10s,如果失败重试一次,超时时间配置为30s。
ngx_http_upstream_module 模块可以针对不同的upstream做很多的策略,包括负载均衡、重试、权重等各种策略,如果upstream是自己能控制的服务,那么使用该模块是非常合适的,但在本文的场景中,proxy的后端是一个第三方服务,那么是否可以配置呢?做了个尝试:

upstream up {
   server   api.test.com:443 ;
}

location / {
   proxy_pass https://up;
   # proxy_pass https://api.test.com;
   proxy_ssl_server_name on;
   proxy_read_timeout 160;
   proxy_connect_timeout 5;
   proxy_buffering off;
}

但不管怎么测试,总是返回502错误,如果把upstream换成baidu.com则没问题,所以百思不得其解,那还有其他方法吗?

下面这种方法是利用proxy_intercept_errors和error_page指令:

location / {

   proxy_set_header Host api.test.com ;
   proxy_ssl_server_name on;
   proxy_read_timeout 10;
   proxy_connect_timeout 5;
   proxy_buffering off;
   proxy_redirect  off;
   proxy_pass https://api.test.com;
   proxy_intercept_errors on;
   error_page 504 = @retry;
}

location @retry {
   proxy_ssl_server_name on;
   proxy_read_timeout 30;
   proxy_connect_timeout 5;
   proxy_buffering off;
   proxy_redirect off;
   proxy_pass https://api.test.com;
   proxy_next_upstream off;
}

proxy_intercept_errors 定义:

Determines whether proxied responses with codes greater than or equal to 300 should be passed to a client or be intercepted and redirected to nginx for processing with the error_page directive.

大概的意思就是对于300以上的http错误,如果proxy_intercept_errors指令打开,会拦截错误交给error_page指令。

那error_page指令的定义呢:

Defines the URI that will be shown for the specified errors. A uri value can contain variables.

可以配置不同的http错误码对应的url地址,在这个例子中就是跳转到@retry location,从而进行一次重试。

测试了下,确实能成功,504 重试成功的例子:

[08/Nov/2023:18:01:17 +0800] 121.40.211.190 - - - _ 47.252.35.171 to: 104.1.7.192:443 : 104.1.6.192:443: POST /v1/ HTTP/1.1 200 upstream_response_time 10.015 : 10.037 msec 1699437677.553 request_time 20.051 

仔细观察,日志中保存了每一次请求ip地址,共两个,总的消耗时间是20.051秒。

504重试失败的例子:

[07/Nov/2023:16:08:11 +0800] 21.40.211.190 - - - _ 47.252.35.171 to: 104.1.7.192:443 : 104.1.6.192:443: POST / HTTP/1.1 504 upstream_response_time 10.006 : 30.006 msec 1699344491.239 request_time 40.013 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1215528.html

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

相关文章

简单的 UDP 网络程序

文章目录: 简单的UDP网络程序服务端创建套接字服务端绑定启动服务器udp客户端本地测试INADDR_ANY 地址转换函数关于 inet_ntoa 简单的UDP网络程序 服务端创建套接字 我们将服务端封装为一个类,当定义一个服务器对象之后,需要立即进行初始化…

态路小课堂丨800G QSFP-DD OSFP VR8光模块简介

TARLUZ态路 近年来,随着IDC数据中心的不断升级,我们可以看到大多数企业已经在不断推出 800G系列光模块。其中,800G QSFP-DD/OSFP VR8(以下简称800G VR8)采用8通道全双工收发模块,能够满足短距离数据中心和云…

腾讯云服务器可用区是什么意思?可用区选择方法

腾讯云服务器可用区是什么意思?云服务器可用区如何选择?可用区是指在同一个地域内电力和网络相互独立的区域,可用区可以做到故障隔离,所以可用区存在的意义在于构建高可用、高容灾应用,将应用部署在不同可用区内&#…

VB.net WebBrowser网页元素抓取分析方法

在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…

SpringJDBC模板类JdbcTemplate

Spring JdbcTemplate使用JdbcTemplate完成增删改查环境准备新增修改删除查询一个对象批量添加批量修改和批量删除使用德鲁伊连接池(之前数据源是用我们自己写的) JdbcTemplate JdbcTemplate是Spring提供的一个JDBC模板类,是对JDBC的封装&…

c语言-浅谈指针(2)

文章目录 1.数组名的理解2.使用指针访问数组3.一维数组传参的本质4.二级指针5.指针数组 本篇文章是关于数组与指针的,在上一篇指针内容的基础上进一步了解指针 1.数组名的理解 我们先来了解一个知识点:在给指针变量赋值时,数组用数组名赋给指…

光伏仪器-1763卫星帆板电源阵列模拟器

01 1763卫星帆板电源阵列模拟器 产品综述: 1763卫星帆板电源阵列模拟器用于解决卫星电源系统研制等帆板电源阵列及二次供电设备的测量和分析,解决电源分系统功能验证、现场试验等无法使用真实的帆板电源等带来的难题,用于卫星或卫星测试系…

顺序理清linux下的环境变量

文章目录 关于环境变量概念(了解)例引 环境变量 查看环境变量的方法echo && printenv 命令 环境变量的配置.bash_profile 常见 环境变量通过程序获取环境变量本地变量环境变量表 关于环境变量 概念(了解) 环境变量的概念…

有什么进销存软件,比较适合零售行业日常开单要求及库存记录?

本文将为大家总结一下对于进销存软件要求: 基础功能:可以日常开单、退换货处理、出入库进阶功能:电脑、手机数据同步,保障数据安全,可进行数据分析 其实无论是小型创业公司,还是一家大型企业,…

为什么SSL证书会有序列号

SSL证书中的序列号是为了唯一标识该证书。他是用于识别和跟踪证书的唯一标识符。以确保每个证书都具有唯一的值。 有序列号的原因如下: 唯一性:通过序列号,可以确保每个ssl证书都有一个独特的标识符。这对于区分不同的证书非常重要。 跟踪和…

tsconfig.json无法写入文件“XXXX“因为它会覆盖输入文件

在开发ts项目的时候,包错提示无法写入文件: tsconfig.json无法写入文件"XXXX"因为它会覆盖输入文件 这是tsconfig.json文件配置问题,需要加入下面的配置就好了: {"compilerOptions": {"outDir": …

教育案例分享 | 安全狗云安全体系为高校提升立体化纵深防御能力

一、客户情况 某高校有服务器500台,对外站点200个,核心交换流量20G。 二、客户痛点 校园网系统分类较多,并且每类网站中安全级重要程度又各不相同,同时有多个网络出口(如:教育网、电信网、移动网等),二级学…

常见JMeter面试题

1、什么是JMeter? JMeter是一种开源的性能测试工具,可以用于测试静态和动态资源,如Web应用程序、数据库、FTP服务器等。 2、JMeter可以测试哪些类型的应用? JMeter可以测试各种类型的应用程序,包括Web应用程序、数…

【知网会议征稿】第三届社会科学与人文艺术国际学术会议 (SSHA 2024)

第三届社会科学与人文艺术国际学术会议 (SSHA 2024) 2024 3rd International Conference on Social Sciences and Humanities and Arts 第三届社会科学与人文艺术国际学术会议 (SSHA 2024)于2024年3月1-3日在中国福州举行。会议旨在为从事“社会科学”与“人文艺术”研究的专…

【C++&数据结构】二叉树(结合C++)的经典oj例题 [ 盘点&全面解析 ](24)

前言 大家好吖,欢迎来到 YY 滴数据结构系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴 数据结构 专栏!更多干货持续更新!以下是传送门! 目录 一.二叉树创建字符串1…

.NET 7 创建Android项目 (拥有原生的界面设计能力,比MAUI更好的性能)

vs2022默认移动开发使用的是maui项目模板,maui确实有很多亮点,就是对比android原生项目性能还需要优化,特别是启动app时无法达到秒开。后来发现vs2022中依然可以直接创建android项目,性能和原生Android基本一致。 1、搜索模板 dot…

办理的流量卡怎么判断是否激活成功?看实名认证还是看充值?

很多朋友可能都会有一个疑问,在网上购买的流量卡怎么才算是激活成功呢?是实名之后就算激活成功,还是需要充值使用才算激活成功呢?这篇文章带大家一块儿来了解一下。 ​  可能很多朋友都会有一个疑问,当你收到流量卡&…

Python开源项目GPEN——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

无论是自己、家人或是朋友、客户的照片,免不了有些是黑白的、被污损的、模糊的,总想着修复一下。作为一个程序员 或者 程序员的家属,当然都有责任满足他们的需求、实现他们的想法。除了这个,学习了本文的成果,或许你还…

Leetcode刷题详解——被围绕的区域

1. 题目链接:130. 被围绕的区域 2. 题目描述: 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 示例 1: 输入:board [["…

漏洞分析 | 漏洞调试的捷径:精简代码加速分析与利用

0x01前言 近期,Microsoft威胁情报团队曝光了DEV-0950(Lace Tempest)组织利用SysAid的事件。随后,SysAid安全团队迅速启动了应急响应,以应对该组织的攻击手法。然而,在对漏洞的分析和复现过程中&#xff0c…