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

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.rhkb.cn/news/193813.html

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

相关文章

使用jmeter+ant进行接口自动化测试(数据驱动)

本次接着介绍如何利用apache-ant执行测试用例并生成HTML格式测试报告 ①下载安装 apache-ant-1.9.9,配置环境变量 如下方式检验安装成功 ②安装好ant后,把jmeter中extras目录下的ant-jmeter-1.1.1.jar 文件copy到ant安装目录下的lib文件夹中 ③配置ant…

Python中带图例的条形图的具体画法和参数调节

首先如上图所示的图是如何画出来的呢,它主要是分三个部分, 首先第一部分是将四个单独的图按照横轴的方式叠加起来,第二部分是如何调节右上角图例的位置和大小,第三部分是标注出整个横轴和竖轴的坐标并调节字体的大小。 一.将四个…

基于vue 2.0的H5页面中使用H5自带的定位,高德地图定位,搜索周边商户,覆盖物标记,定位到当前城市

基于vue的H5页面中使用高德地图定位&#xff0c;搜索周边商户&#xff0c;覆盖物标记 首先安装高德地图插件 npm i amap/amap-jsapi-loader --save地图承载容器 <template><div id"container"></div> </template>地图容器样式 <style…

利用Nextcloud搭建企业私有云盘系统

利用Nextcloud搭建企业私有云盘系统 1. 场景介绍2. 环境准备3. 安装NextCloud4. 系统功能验证 1. 场景介绍 Nextcloud是一款免费开源的私有云存储系统&#xff0c;采用PHPMySQL开发&#xff0c;提供了多个同步客户端支持多种设备访问&#xff0c;使用Nextcloud可以快速便捷地搭…

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)

文章目录 OpenCV的色彩空间——RGB与BGROpenCV的色彩空间——HSV与HSLHSV主要用于OpenCV中HSL OpenCV色彩空间转换YUV主要用于视频中题目 图像操作的基石Numpy【基础操作】np.arraynp.zerosnp.onesnp.fullnp.identitynp.eye Numpy基本操作之矩阵的检索与赋值Numpy基本操作三——…

腾讯待办是什么?关停之后如何继续提醒待办事项?

由于业务方向调整&#xff0c;腾讯待办将于2023年的12月20日全面停止运营并下架。那么腾讯待办是什么呢&#xff1f;它是一款以微信小程序呈现的待办事项和日程管理工具&#xff0c;旨在帮助用户更好地管理自己的待办事项和日程安排。用户可以在该小程序中创建待办事项、设置提…

前三季度亏损近亿元,「缺钱」的北斗智联拟变更控股股东

本月初&#xff0c;北斗星通发布《关于深圳证券交易所重组问询函回复的公告》&#xff0c;针对公司全资子公司拟出售孙公司北斗星通智联科技有限责任公司&#xff08;以下简称北斗智联&#xff09; 15%的股权事宜做出进一步解读。 按照此前计划&#xff0c;15%的股权&#xff0…

使用CycleGAN训练自己的数据集

一、下载源码 源码下载链接&#xff1a;https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 二、调整自己的数据集格式 按照如下格式放 三、安装好所需要的python包 使用命令&#xff1a;pip install 包名称 在anaconda里面安装&#xff0c; 四、训练和测试 在开始训…

LeetCode - 160. 相交链表(C语言,配图)

思路&#xff1a; 1. 我们算出两个链表的长度lenA&#xff0c;lenB。我们在这里最后判断一下&#xff0c;两个链表的尾节点是否是一样的&#xff0c;如果是相交链表&#xff0c;那它们的尾节点一定是一样的。 2. 算出长链表和短链表的差距n&#xff08;n | lenA- lenB |&#…

html图片控制处理放大缩小移动多种案例(附源码)

文章目录 1.图片处理风格1.1 简约版本图片预览1.2 图片查看器&#xff0c;可放大缩小&#xff0c;旋转1.3 图片放大镜效果1.4 图片放大显示&#xff0c;支持滚轮调整大小1.5 图片上下滑动缩略图字幕效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh …

Google codelab WebGPU入门教程源码<3> - 绘制网格(源码)

对应的教程文章: https://codelabs.developers.google.com/your-first-webgpu-app?hlzh-cn#4 对应的源码执行效果: 对应的教程源码: 此处源码和教程本身提供的部分代码可能存在一点差异。 class Color4 {r: number;g: number;b: number;a: number;constructor(pr 1.0, p…

Linux下好玩的指令(持续更新)

适用于centOS下&#xff0c;别的Linux换个指令就行&#xff0c;内容是一样的 centOS有的指令安装不了&#xff1f;试试拓展yum源&#xff0c;再安装基本就OK啦&#xff01; yum install -y epel-release 下面是作者在centOS环境下亲测可以使用的&#xff0c;如果你是root用户直…

查询附近500米的餐厅

前言 查询附近500米数据&#xff0c;第一反应是用ST_Buffer&#xff0c;但是ST_Buffer文档写了一句话&#xff0c;使用ST_DWithin效率更高。 ST_Buffer (postgis.net) ST_DWithin (postgis.net) 数据取点 我有一种坐标系4326的表ne_10m_admin_0_boundary_lines_land&#xf…

Camtasia2024喀秋莎微课制作神器新版本功能介绍

最近无论是b站&#xff0c;抖音&#xff0c;快手等视频软件中都有不少微课视频、电视剧解说横空出世&#xff0c;通过这些“热度”带来的收益也是无法估量的&#xff0c;很多自媒体博主月入上万惹人羡慕。 不少朋友也想在这股短视频洪流中分一碗羹&#xff0c;但又苦于技术跟不…

Python中的时间序列分析模型ARIMA

大家好&#xff0c;时间序列分析广泛用于预测和预报时间序列中的未来数据点。ARIMA模型被广泛用于时间序列预测&#xff0c;并被认为是最流行的方法之一。本文我们将学习如何在Python中搭建和评估用于时间序列预测的ARIMA模型。 ARIMA模型 ARIMA模型是一种用于分析和预测时间…

软件外包开发设计文档

软件设计文档是在软件开发过程中编写的一个关键文档&#xff0c;用于记录系统的设计和结构。设计文档通常包含以下内容&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.引言&#xff08;Introductio…

GD32_ADC采样+DMA多通道扫描传输

GD32_ADC采样DMA多通道扫描传输 文章目录 GD32_ADC采样DMA多通道扫描传输前言一、资源介绍二、原理1.ADC连续扫描模式2.DMA传输3.ADC内部通道 三、配置1.ADC配置2.DMA配置3.注意事项 四、计算1.分压转换2.数据转换 前言 <1>、硬件平台&#xff1a;可运行软件程序的GD32单…

年产200万件的超级工厂投产!巨头「闭环」汽车电子全产业链

随着汽车电动化程度的提升&#xff0c;汽车电子部件占整车成本比重逐步升高&#xff0c;已经从2012年的25%上升到2021年的55%。 且汽车电子电气架构向整车集中演进&#xff0c;智能汽车已经进入了软件及数据定义时代&#xff0c;底层硬件打破了过去几十年围绕特定应用不断增加…

【luckfox】3、计算重量差

前言 本章结合之前的hx711驱动&#xff0c;实现读取质量&#xff0c;记录时间及剩余质量并存入csv文件&#xff0c;计算质量差并总计。 代码 luckfox-pico\project\app\test_app\hx711\hx711_app_addtime.c #include <stdio.h> #include <stdlib.h> #include &…

文心一言 VS 讯飞星火 VS chatgpt (136)-- 算法导论11.3 2题

二、用go语言&#xff0c;假设将一个长度为r的字符串散列到m 个槽中&#xff0c;并将其视为一个以 128 为基数的数&#xff0c;要求应用除法散列法。我们可以很容易地把数 m 表示为一个 32 位的机器字&#xff0c;但对长度为r的字符串&#xff0c;由于它被当做以 128 为基数的数…