nginx proxy_pass 路径拼接的具体实现

 更新时间:2026年05月21日 09:22:23   作者:冰糖拌面  
本文主要介绍了nginx proxy_pass 路径拼接的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

主要是记录proxy_pass在做转发时,转发的url生成规则,本文以通用字符串匹配为例,就是类似如下

location /aaa {
    proxy_pass ...
}

正则及精准匹配放到下篇说

正文

对于访问后端路径的拼接,proxy_pass可以分为两种,一种是携带URI(或者说是某个uri的一部分),一种是不带uri(或者说仅有协议 + host)

例如 http://localhost:80 就是不带uri的地址

例如 http://localhost:80/ 和 http://localhost:80/aaa 就是携带URI的地址

以下案例全部是假设 nginx设置server 为example.com,即

http {
    server {
        listen 8080;
        server_name example.com; 
    }
}

不带uri

这种比较好说,访问nginx的URI直接拼接到proxy_pass的后面就可以了,举例如下

location /aaa {
    proxy_pass http://localhost
}
location /aaa/ {
    proxy_pass http://localhost
}

1、对于上面两种写法,访问nginx的URL为 http://example.com:8080/aaa/xxx,nginx转发的地址将是 http://localhost/aaa/xxx

2、但是对于http://example.com:8080/aaa就会有所不同,如果只有location /aaa/ , 那么http://example.com:8080/aaa会被重定向为http://example.com:8080/aaa/

带uri

这种就是,将原URL的URI匹配到的location后面的内容去掉,再拼接到proxy_pass后,常见案例如下

第一种

location /aaa {
    proxy_pass http://localhost/
}

访问 http://example.com:8080/aaa/xxx ,nginx将转发到 http://localhost//xxx 

解析就是 /aaa/xxx 去掉 /aaa 剩下了 /xxx,拼接到http://localhost/ 后面 成了 http://localhost//xxx

这种写法不对,多了一个/,但是我用来测试的nginx1.25.1没有问题,依然转发到正确的 http://localhost/xxx,但是不建议搞这种特立独行的

第二种

location /aaa/ {
    proxy_pass http://localhost/
}

 访问 http://example.com:8080/aaa/xxx ,nginx将转发到 http://localhost/xxx 

解析就是 /aaa/xxx 去掉 /aaa/ 剩下了 xxx,拼接到http://localhost/ 后面 成了 http://localhost/xxx

第三种

location /aaa/ {
    proxy_pass http://localhost/ccc
}

 访问 http://example.com:8080/aaa/xxx ,nginx将转发到 http://localhost/cccxxx

解析就是 /aaa/xxx 去掉 /aaa/ 剩下了 xxx,拼接到http://localhost/ccc 后面 成了 http://localhost/cccxxx

这一眼看过去就是个错误

第四种

location /aaa {
    proxy_pass http://localhost/ccc
}

 访问 http://example.com:8080/aaa/xxx ,nginx将转发到 http://localhost/ccc/xxx

解析就是 /aaa/xxx 去掉 /aaa 剩下了 /xxx,拼接到http://localhost/ccc 后面 成了 http://localhost/ccc/xxx

第五种

location /aaa/ {
    proxy_pass http://localhost/ccc/
}

 访问 http://example.com:8080/aaa/xxx ,nginx将转发到 http://localhost/ccc/xxx

解析就是 /aaa/xxx 去掉 /aaa/ 剩下了 xxx,拼接到http://localhost/ccc/ 后面 成了 http://localhost/ccc/xxx 

第六种

location /aaa {
    proxy_pass http://localhost/ccc/
}

 访问 http://example.com:8080/aaa/xxx ,nginx将转发到 http://localhost/ccc//xxx

解析就是 /aaa/xxx 去掉 /aaa 剩下了 /xxx,拼接到http://localhost/ccc/ 后面 成了 http://localhost/ccc//xxx 

这种也是非正常的拼接,但是大多数浏览器、中间件都能支持,不建议这么做

总结

1、proxy_pass后面不带uri的话,原URL的URI直接拼接proxy_pass就得出访问的后端地址

2、对于带uri的proxy_pass,将原URL的URI匹配到的location后面的内容去掉,再拼接到proxy_pass后

3、建议location 和 proxy_pass的结尾要么都带 / ,要么都不带/,否则会出现案例1、3、6的情况

到此这篇关于nginx proxy_pass 路径拼接的具体实现的文章就介绍到这了,更多相关nginx proxy_pass 路径拼接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx配置支持IPV6地址的方法示例

    Nginx配置支持IPV6地址的方法示例

    本文主要介绍了如何搭建并测试Nginx以支持IPV6地址的过程,包括下载安装包、编译安装、配置和启动Nginx等步骤,同时,文章还解决了在测试IPV6地址时遇到的两个问题:curl解析错误和阿里云、腾讯云IPV6地址配置问题
    2024-11-11
  • nginx 基本入门教程

    nginx 基本入门教程

    本篇文章主要介绍了详解nginx 基本入门,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Nginx 转发匹配规则的实现

    Nginx 转发匹配规则的实现

    这篇文章主要介绍了Nginx 转发匹配规则的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Nginx实现清除缓存内容

    Nginx实现清除缓存内容

    NGINX可以从缓存中删除旧的和过期的缓存文件,本文主要介绍了Nginx实现清除缓存内容,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Nginx负载均衡通用方案详解

    Nginx负载均衡通用方案详解

    本文介绍Nginx负载均衡的最优配置方案,强调了因应不同场景(如视频会议和商城)需求差异的重要性,提出通过模块化配置和核心组件组合,实现一次配置多场景覆盖,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • 18个运维必知的Nginx代理缓存配置技巧(你都掌握了哪些呢)

    18个运维必知的Nginx代理缓存配置技巧(你都掌握了哪些呢)

    这篇文章主要介绍了18个运维必知的Nginx代理缓存配置技巧(你都掌握了哪些呢),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Nginx新增http_ssl_module模块的解决方案

    Nginx新增http_ssl_module模块的解决方案

    这篇文章主要介绍了Nginx新增http_ssl_module模块的解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • 线上Nginx频繁502的排查过程与解决方案

    线上Nginx频繁502的排查过程与解决方案

    本文详细介绍了在线上Nginx频繁出现502错误的排查过程,包括监控数据、Nginx和后端服务的状态检查、连接数分析以及最终的解决方案,作者通过调整系统参数、优化Nginx配置和多实例负载均衡等措施,成功解决了502错误问题,需要的朋友可以参考下
    2026-01-01
  • 从Nginx切换到Tengine的步骤分享

    从Nginx切换到Tengine的步骤分享

    由淘宝网发起的Web服务器 Tengine 可以被看作一个更好的Nginx,或者是Nginx的超集。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性
    2012-11-11
  • 详解基于CentOS 7配置Nginx自启动

    详解基于CentOS 7配置Nginx自启动

    这篇文章主要介绍了详解基于CentOS 7配置Nginx自启动,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论