Nginx 是最常用的反向代理工具之一,一个指令 proxy_pass搞定反向代理,对于接口代理、负载均衡很是实用,但 proxy_pass指令后面的参数很有讲究,通常一个/都可能引发一个血案。

通常nginx配置proxy_pass指令时,如果proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分代理上。

url 只是 host,不带/

例如:

  • http://host - √

  • https://host - √

  • http://host:port - √

  • https://host:port - √

  • http://host/ - x

  • http://host:port/ - x

这时候 location匹配的完整路径将直接透传给 url ,如:

// 访问:   /                             代理:   /
// 访问:   /api/xx                       代理:   /api/xx
// 访问:   /api/xx?aa                    代理:   /api/xx?aa
location / {proxy_pass http://sevice;
}// 访问:   /api/                         代理:  /api/
// 访问:   /api/xx                       代理:  /api/xx
// 访问:   /api/xx?aa                    代理:  /api/xx?aa
// 访问:   /api-xx?aa                    代理: 不匹配
location /api/ {proxy_pass http://sevice;
}// 访问:   /api/                         代理:   /api/
// 访问:   /api/xx                       代理:   /api/xx
// 访问:   /api/xx?aa                    代理:   /api/xx?aa
// 访问:   /api-xx?aa                    代理:   /api-xx?aa
location /api {proxy_pass http://sevice;
}

url 包含路径

注意,这里的路径哪怕只是一个 / 也是存在的,如:

  • http://host - x

  • https//host/ - √

  • http://host:port - x

  • https://host:port/ - √

  • http://host/api - √

  • http://host/api/ - √

当 proxy_pass url 的 url 包含路径时,匹配时会根据 location 的匹配后的链接透传给 url ,注意匹配后就是这样:

location 规则

访问的原始链接

匹配之后的路径

location /

/

location /

/a

a

location /

/a/b/c?d

a/b/c?d

location /a/

/a/

location /a/

/a/b/c?d

b/c?d

在 proxy_pass url 包含路径时,将会把匹配之后的路径透传给 url,如:

// 访问:   /                            代理:   /
// 访问:   /api/xx                      代理:   /api/xx
// 访问:   /api/xx?aa                   代理:   /api/xx?aa
location / {proxy_pass http://service/;
}// 访问:   /api/                        代理:   /
// 访问:   /api/xx                      代理:   /xx
// 访问:   /api/xx?aa                   代理:   /xx?aa
// 访问:   /api-xx?aa                   代理:  未匹配
location /api/ {proxy_pass http://service/;
}// 访问:   /api                         代理:   /
// 访问:   /api/                        代理:   //
// 访问:   /api/xx                      代理:   //xx
// 访问:   /api/xx?aa                   代理:   //xx?aa
// 访问:   /api-xx?aa                   代理:   /-xx?aa
location /api {proxy_pass http://service/;
}// 访问:   /api/                        代理:   /v1
// 访问:   /api/xx                      代理:   /v1xx
// 访问:   /api/xx?aa                   代理:   /v1xx
// 访问:   /api-xx?aa                   代理:  未匹配
location /api/ {proxy_pass http://service/v1;
}// 访问:   /api/                        代理:   /v1/
// 访问:   /api/xx                      代理:   /v1/xx
// 访问:   /api/xx?aa                   代理:   /v1/xx
// 访问:   /api-xx?aa                   代理:  未匹配
location /api/ {proxy_pass http://service/v1/;
}

重写代理链接 - url rewrite

当原始链接(浏览器访问的链接)和代理服务器链接规则不一致时,可以使用 Nginx URL Rewrite 功能去动态的重写,如:

location ~* ^/api/ {rewrite ^/api/(.*) /?path=$1 break;proxy_pass http://node:8080;
}

以上请求会把匹配 /api/的链接重写为 /?path=的链接透传给 node:8080 服务,有意思的是当使用 rewrite指令并且生效后,proxy_pass url链接中的路径会被忽略,如:


// 访问:   /                        代理:   /node/
// 访问:   /api                     代理:   /node/api
// 访问:   /api/                    代理:   /?path=
// 访问:   /api/a/b/c               代理:   /?path=a/b/c
location / {rewrite ^/api/(.*) /?path=$1 break;proxy_pass http://node:8080/node/;
}

Nginx proxy_pass详解相关推荐

  1. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  2. nginx配置详解1

    Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...

  3. Nginx配置详解/代理服务的配置说明

    Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...

  4. Nginx rewrite 详解

    Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关 ...

  5. 配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解)

    配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解) 免费领取满减阿里云红包 项目名称:[域名解析–隐形URL转发]–centos 7.3 环境: 阿里云服务器之上有多个tomc ...

  6. 学完Nginx/OpenResty详解,反向代理与负载均衡配置,能涨薪多少

    反向代理与负载均衡配置 接下来介绍Nginx的重要功能:反向代理+负载均衡.单体Nginx的性能虽然不错,但也是有瓶颈的.打个比方:用户请求发起一个请求,网站显示的图片量比较大,如果这个时候有大量用户 ...

  7. nginx学习简介-安装-启动-命令-nginx配置文件详解

    nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...

  8. 分布式应用Nginx配置详解

    分布式应用Nginx配置详解 Nginx基本介绍 Nginx安装 安装依赖 安装openssl 安装pcre 安装zlib 安装Nginx Nginx负载均衡 负载均衡配置 失败重试配置 Nginx限 ...

  9. nginx配置详解,完全卸载nginx, nginx https配置

    nginx 配置文件详解 文章目录 nginx 配置文件详解 Ubuntu nginx 目录结构 nginx 配置文件结构 默认nginx.conf( (1.18.0版本) location详解,pr ...

最新文章

  1. Spring源码分析【7】-Spring 模板页和JSP文件的编译
  2. 我的北大故事:犯其至难图其至远!
  3. Java8新特性学习记录
  4. git checkout和git reset的一些区别以及配置git简写命令
  5. ASP.NET MVC WebAPI 资源整理
  6. Machine Learning实验3】SoftMax regression
  7. 转://Oracle 复合压缩索引场景及性能对比
  8. linux虚拟机上离线安装mysql_Linux下离线安装MySQL
  9. 关于Postgre中的Timestamp(时间戳)格式。
  10. c java python php_php c java python 语言对比
  11. DDC——Deep Domain Confusion Maximizing for Domain Invariance
  12. FreeSWITCH channel variables(信道变量)
  13. Pandas库基础知识(一)
  14. RGB格式转换的实现
  15. ipad上写代码???阿里云+vscode-server助你一臂之力
  16. 《Mini-Me: An Adaptive Avatar for Mixed Reality Remote Collaboration》论文笔记
  17. Compilation is not supported for following modules
  18. 使用 163 邮箱接收 ASP.NET 用户反馈
  19. 南充一中2021成绩查询高考,2021年南充一中升学率高不高?
  20. 用友通T3联不上服务器

热门文章

  1. Python自学难吗?Python课程主要学些什么内容?
  2. MATLAB去读网页源码时中文乱码
  3. php解析mht,php解析mht文件转换成html的实例
  4. Android Audio混音实践篇
  5. 我们既然选择了远方,便只顾风雨兼程)
  6. *-面对困境,莫言放弃----给学习中遇到困境的学员们
  7. 基于DPABI的精神分裂患者脑图特征提取和统计分析
  8. Traffic Manager
  9. ubuntu安装极点五笔输入法
  10. react中用useEffect模拟组件生命周期