当前位置: 首页 > news >正文

详细分析Nginx中的proxy_pass 末尾斜杠

目录

  • 前言
  • 1. 基本知识
  • 2. Demo

前言

对于Nginx的讲解,更多推荐阅读:

  1. Nginx配置静态网页访问(图文界面)
  2. Nginx将https重定向为http进行访问的配置(附Demo)
  3. Nginx从入门到精通(全)
  4. 详细分析Nginx配置参数(附Demo)

1. 基本知识

这个知识点大有学问!

在 Nginx 中,proxy_pass 用于反向代理的关键指令,它决定 Nginx 将客户端请求转发到哪个上游服务器

proxy_pass 的末尾斜杠会影响请求的 URL 重写方式,因此理解它的细微差别非常重要

带斜杠和不带斜杠的区别

  1. 不带斜杠的 proxy_pass
    Nginx 不会将客户端请求的 URI 的一部分与 proxy_pass 的 URI 进行拼接
    location 配置中的 URI 部分直接被替换为 proxy_pass 指定的 URI

  2. 带斜杠的 proxy_pass
    Nginx 会将 location 中的匹配部分替换为 proxy_pass 后的 URI 部分,并保留客户端请求的 URI 剩余部分
    换句话说,Nginx 将请求的路径拼接到 proxy_pass 的 URL 后面

两种方式的区别(带 URI 和不带 URI)

Nginx 中 proxy_pass 有两种使用方式:

  1. 不带 URI 的方式
    proxy_pass 直接指向上游服务器的主机名或 IP 地址,不包括任何路径部分
    此时 location 匹配的整个 URI 将直接传递给上游服务器
location /api {proxy_pass http://backend;
}

在这个配置中,如果客户端请求 http://example.com/api/v1/users,Nginx 将向上游服务器发送请求为 http://backend/api/v1/users

  1. 带 URI 的方式
    proxy_pass 指定了一个完整的 URL,包括路径部分
    如果 proxy_pass URL 后面有斜杠,location 匹配的 URI 部分会被去掉,并把剩下的 URI 追加到 proxy_pass 的 URL 之后
location /api {proxy_pass http://backend/;
}

在这个配置中,如果客户端请求 http://example.com/api/v1/users,Nginx 会向上游服务器发送 http://backend/v1/users
/api 被去掉了,因为 proxy_pass 后面有斜杠

2. Demo

不带斜杠的配置

location /app {proxy_pass http://backend/app;
}

解释:

如果客户端发起请求 http://example.com/app/test,
Nginx 会将请求转发到 http://backend/app/test,/app 作为 proxy_pass 的一部分被保留

带斜杠的配置

location /app {proxy_pass http://backend/;
}

解释:
如果客户端发起请求 http://example.com/app/test,
Nginx 会将请求转发到 http://backend/test,/app 被移除,只保留 /test

总的来说:

  • 带斜杠的 proxy_pass:会保留请求路径的动态部分
  • 不带斜杠的 proxy_pass:将保留 proxy_pass 自己的路径,并直接替换 location 的匹配部分

实战中的Demo如下:

在这里插入图片描述

http://www.lryc.cn/news/447242.html

相关文章:

  • 数据结构:双指针—移动0(OJ283)
  • LeetCode - 850 矩形面积 II
  • Jenkins Pipeline 中通过勾选参数来控制是否构建 Docker 镜像
  • C++入门基础知识86(实例)——实例11【计算自然数之和】
  • ChatGPT与R语言融合技术在生态环境数据统计分析、绘图、模型中的实践与进阶应用
  • OpenAi以及Dify结合生成Ai模型
  • 【漏洞复现】用友 UFIDA /portal/pt/file/upload 任意文件上传漏洞
  • C:内存函数
  • 【Web】御网杯信息安全大赛2024 wp(全)
  • VC++同时处理ANSI和Unicode字符集,除了使用TCHAR和_T()宏外,还有其他方法可以实现吗?
  • MATLAB定位程序与讲解【专栏介绍】
  • 机器学习3--numpy
  • Linux之我不会
  • 音视频整体解码流程和同步流程
  • 1.2 HuggingFists安装说明-Linux安装
  • 四,MyBatis-Plus 当中的主键策略和分页插件的(详细实操使用)
  • Win32打开UWP应用
  • C# C++ 笔记
  • 关于最小二乘法
  • 国产OpenEuler与Centos全面之比较
  • Java面试题一
  • LabVIEW提高开发效率技巧----自动化测试和持续集成
  • 开源链动 2+1 模式 S2B2C 商城小程序:激活 KOC,开启商业新征程
  • 什么是Node.js?
  • 即插即用篇 | DenseNet卷土重来! YOLOv8 引入全新密集连接卷积网络 | ECCV 2024
  • 智能监控,守护绿色能源:EasyCVR在电站视频监控中心的一站式解决方案
  • 【BUG】静读天下|静读天下无法设置段间距解决方案
  • 希捷电脑硬盘好恢复数据吗?探讨可能性、方法以及注意事项
  • java通过webhook给飞书发送群消息
  • 每日一题——第一百零九题