• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    详解nginx 中location和 proxy_pass的匹配规则

    发布者: 404号房间 | 发布时间: 2025-6-17 08:19| 查看数: 99| 评论数: 0|帖子模式

    我来详细解释
    1. location
    复制代码
    1. proxy_pass
    复制代码
    的作用以及它们在你的例子中的含义。

    location 的作用
    1. location
    复制代码
    是 Nginx 中用来匹配客户端请求 URI 的指令,决定如何处理特定路径的请求。它定义了请求的路由规则,后续的配置(如
    1. proxy_pass
    复制代码
    )会应用在匹配的请求上。


    语法
    1. location [修饰符] 匹配模式 {
    2.     # 配置块
    3. }
    复制代码

    • 修饰符:可选,比如
      1. =
      复制代码
      (精确匹配)、
      1. ~
      复制代码
      (正则匹配)等。
    • 匹配模式:可以是具体路径、正则表达式等。

    示例:location /test
    1. location /test {
    2.     proxy_pass http://abc.com;
    3. }
    复制代码

    • 含义

      • 当客户端请求的 URI 以
        1. /test
        复制代码
        开头时,这个
        1. location
        复制代码
        块会被匹配。
      • 比如请求
        1. http://yourdomain.com/test
        复制代码
        1. http://yourdomain.com/test/abc
        复制代码
        都会进入这个块。

    • URI 处理

      • 默认情况下,Nginx 会把请求的完整 URI(包括
        1. /test
        复制代码
        部分)传递给后端,除非
        1. proxy_pass
        复制代码
        有特殊配置。


    proxy_pass 的作用
    1. proxy_pass
    复制代码
    指定将请求代理到的后端服务器地址(可以是域名、IP 或上游服务器组)。它定义了请求的目标。
    语法
    1. proxy_pass 协议://目标地址;
    复制代码
    示例:proxy_pass http://abc.com/tt
    1. location /test {
    2.     proxy_pass http://abc.com/tt;
    3. }
    复制代码

    • 含义

      • 将匹配
        1. location /test
        复制代码
        的请求转发到
        1. http://abc.com/tt
        复制代码

      • 后端服务器会收到转发的请求,具体 URI 取决于配置细节。


    结合 location /test 和 proxy_pass http://abc.com/tt

    让我解释这俩组合起来的效果:

    默认行为(带路径替换)
    1. location /test {
    2.     proxy_pass http://abc.com/tt;
    3. }
    复制代码

    • 客户端请求
      1. http://yourdomain.com/test/abc
      复制代码
    • 转发到后端
      1. http://abc.com/tt/abc
      复制代码
    • 解释

        1. location /test
        复制代码
        匹配请求的
        1. /test
        复制代码
        前缀。
      • Nginx 会把
        1. /test
        复制代码
        后面的部分(
        1. /abc
        复制代码
        )保留下来。
        1. proxy_pass http://abc.com/tt
        复制代码
        指定目标地址为
        1. http://abc.com/tt
        复制代码
        ,并把剩余路径(
        1. /abc
        复制代码
        )追加到后面。
      • 最终后端收到的是
        1. http://abc.com/tt/abc
        复制代码



    加斜杠的效果(不替换路径)

    如果在
    1. proxy_pass
    复制代码
    后加斜杠:
    1. location /test {
    2.     proxy_pass http://abc.com/tt/;
    3. }
    复制代码

    • 客户端请求
      1. http://yourdomain.com/test/abc
      复制代码
    • 转发到后端
      1. http://abc.com/tt/abc
      复制代码
    • 解释

      • 加了斜杠
        1. /
        复制代码
        后,Nginx 不会把
        1. location
        复制代码
        1. /test
        复制代码
        部分替换掉,而是直接把请求的剩余路径(
        1. /abc
        复制代码
        )追加到
        1. http://abc.com/tt/
        复制代码
        后面。
      • 结果和上面一样,但逻辑更明确。


    不带具体路径
    1. location /test {
    2.     proxy_pass http://abc.com;
    3. }
    复制代码

    • 客户端请求
      1. http://yourdomain.com/test/abc
      复制代码
    • 转发到后端
      1. http://abc.com/test/abc
      复制代码
    • 解释

      • 因为
        1. proxy_pass
        复制代码
        没有指定具体路径(只有域名),Nginx 会把客户端的完整 URI(
        1. /test/abc
        复制代码
        )直接传递给后端。


    常见配置模式


    • 精确匹配路径
    1. location = /test {
    2.     proxy_pass http://abc.com/tt;
    3. }
    复制代码

    • 只匹配
      1. http://yourdomain.com/test
      复制代码
      ,不会匹配
      1. /test/abc
      复制代码

    • 转发到
      1. http://abc.com/tt
      复制代码
      (不带额外路径)。


    • 去掉前缀
    1. location /test/ {
    2.     proxy_pass http://abc.com/;
    3. }
    复制代码

    • 请求
      1. http://yourdomain.com/test/abc
      复制代码
      转发到
      1. http://abc.com/abc
      复制代码

      1. /test/
      复制代码
      被去掉,只保留后面的部分。


    • 正则匹配
    1. location ~ ^/test/(.*)$ {
    2.     proxy_pass http://abc.com/tt/$1;
    3. }
    复制代码

    • 请求
      1. http://yourdomain.com/test/abc
      复制代码
      转发到
      1. http://abc.com/tt/abc
      复制代码

    • 使用正则捕获组
      1. $1
      复制代码
      动态传递路径。

    总结


      1. location /test
      复制代码
      :匹配以
      1. /test
      复制代码
      开头的请求。
      1. proxy_pass http://abc.com/tt
      复制代码
      :将请求转发到
      1. abc.com/tt
      复制代码
      ,默认保留
      1. /test
      复制代码
      后的路径并追加到
      1. /tt
      复制代码
      后。
    • 关键点:是否加斜杠(
      1. /
      复制代码
      )、是否用正则,会影响路径的传递方式。
    到此这篇关于nginx `location` 和 `proxy_pass`的匹配规则的文章就介绍到这了,更多相关nginx  location  和 proxy_pass匹配规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/server/3392045qc.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表