Nginx:proxy_pass指令

embedded/2024/10/19 4:02:43/

proxy_pass 指令在 Nginx 中是实现反向代理和负载均衡的重要指令。

一. 反向代理

在反向代理的场景下,proxy_pass 指令用于将接收到的请求转发给另一个后端服务器。后端服务器地址可以是 IP 地址加端口、域名加端口、或者一个完整的 URL。

注意事项

proxy_pass 后面的 URL 末尾是否存在 / 的处理逻辑不同。如果在 proxy_pass 后面的 URL 加 /,表示绝对根路径;如果没有 /,表示相对路径,可能会把匹配的路径部分也给代理走。

示例如下:

情况一
nginx">location /api/ {proxy_pass http://localhost:8080/;
}location /V1/ {proxy_pass http://localhost:8080/api/;
}

对于访问 http://example.com/api/test,Nginx 会将其转发到 http://localhost:8080/test。

对于访问 http://example.com/V1/data,Nginx 会将其转发到 http://localhost:8080/api/data。

注意:如果 proxy_pass 指令包含了一个 URI 路径(/api/),Nginx 会将这个路径与原始请求 URI 中匹配 location 块后剩余的部分(data)进行拼接。在拼接时,,Nginx 会确保路径的拼接是正确的,并且没有不必要的双斜杠(//)。

情况二
nginx">location /api/ {proxy_pass http://localhost:8080;
}

对于访问 http://example.com/api/test,Nginx 会将其转发到 http://localhost:8080/api/test。

情况三
nginx">location /V1 {proxy_pass http://localhost:8080/api;
}

对于访问 http://example.com/V1/data,Nginx 会将其转发到 http://localhost:8080/api/data。

注意:确保 location 块和 proxy_pass 指令的路径部分要么都加斜杠(/),要么都不加斜杠。

情况四
nginx">location ~ /api/ {proxy_pass http://localhost:8080;        # 不可以写成 8080/...
}

对于访问 http://example.com/api/test,Nginx 会将其转发到 http://localhost:8080/test。

注意:当 location 使用正则表达式来匹配请求的 URI 时,proxy_pass 应该只包含主机名和端口号,而不应该包含任何 URI 路径。

二. 负载均衡

在负载均衡的场景下,proxy_pass 指令与 upstream 模块一起使用,用于将请求分发到多个后端服务器中的一个。

nginx">upstream backend-servers {  server srv1.example.com;  server srv2.example.com;  server srv3.example.com;  
}  server {listen 80;server_name   www.example.com;location /api/ {proxy_pass  http://backend-servers;}
}

负载均衡默认使用的是轮询算法,按照时间先后来分发请求,第一个 request 走 srv1.example.com,第二个 request 走 srv2.example.com … 以此类推。


http://www.ppmy.cn/embedded/128643.html

相关文章

Python近红外光谱数据分析技术

原文链接:Python近红外光谱数据分析技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247618985&idx4&sncb10b44822eeb8e30eadd9e45fbdcdc4&chksmfa82504ecdf5d9584a78de0adfc518c159baf1b70b26106a621adf1aa0bfaf1c67b7203e4b7c&toke…

K8s(学习笔记)

swap分区是什么呀? 什么是ipvs呀? yaml是什么呀??? p20看不下去了!!!

Springboot集成Kafka

一、添加依赖 我们使用spring本身支持的spring-kafka依赖,但是需要注意版本问题,不同的springboot版本支持不同的kafka版本,避免因版本不同带来困扰!参考下图: 或者访问官网查看版本对应关系:Spring for Ap…

浅谈C++之日志记录

在 C 中使用 log4net 进行日志记录,您需要遵循以下步骤: 安装 log4net: 首先,您需要在您的 .NET 项目中包含 log4net 库。通常,这可以通过 NuGet 包管理器来完成。 配置 log4net: 您需要创建一个配置文件…

WebServer构建响应 发送响应

1.构建响应 构建响应流程如下 确认方法根据不同方法,以不同方法提参确认访问资源如果用户的URL没有指明要访问的某种资源(路径),虽然浏览器默认会添加/,但是依旧没有告知服务器,要访问什么资源 此时,默认返回对应服务…

【Qt】继承自QItemDelegate的代理类是如何工作的?

在 Qt 中,继承自QItemDelegate的代理类主要使用createEditor 和 setEditorData 方法: 创建编辑器:当用户开始编辑一个项时(例如通过双击一个单元格或者通过其他方式触发编辑),视图会调用委托的 createEdit…

Python创建多个线程分别启动http、WebSocket服务

我的计划是启动主程序后新建3个独立的线程,一个线程执行PLC读取,一个线程启动工艺测试(含http服务),另外一个线程启动WebSocket。 新增 /lib/PlcReader.py # 执行 PLC 读取类 # 读取 PLC 配置文件 # 定时&#xff08…

在 Vue 项目中引入字体文件的详细指南

在 Vue 项目中引入自定义字体文件,可以通过多种方式实现。这取决于你的项目结构、构建工具以及字体文件的来源。本文将详细介绍如何通过不同方法引入本地字体文件以及从外部引入字体。 1. 引入本地字体文件 在项目中引入本地字体文件,通常需要通过 CSS…