Nginx proxy_pass详解
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详解相关推荐
- Nginx Rewrite详解
Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...
- nginx配置详解1
Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...
- Nginx配置详解/代理服务的配置说明
Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...
- Nginx rewrite 详解
Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关 ...
- 配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解)
配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解) 免费领取满减阿里云红包 项目名称:[域名解析–隐形URL转发]–centos 7.3 环境: 阿里云服务器之上有多个tomc ...
- 学完Nginx/OpenResty详解,反向代理与负载均衡配置,能涨薪多少
反向代理与负载均衡配置 接下来介绍Nginx的重要功能:反向代理+负载均衡.单体Nginx的性能虽然不错,但也是有瓶颈的.打个比方:用户请求发起一个请求,网站显示的图片量比较大,如果这个时候有大量用户 ...
- nginx学习简介-安装-启动-命令-nginx配置文件详解
nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...
- 分布式应用Nginx配置详解
分布式应用Nginx配置详解 Nginx基本介绍 Nginx安装 安装依赖 安装openssl 安装pcre 安装zlib 安装Nginx Nginx负载均衡 负载均衡配置 失败重试配置 Nginx限 ...
- nginx配置详解,完全卸载nginx, nginx https配置
nginx 配置文件详解 文章目录 nginx 配置文件详解 Ubuntu nginx 目录结构 nginx 配置文件结构 默认nginx.conf( (1.18.0版本) location详解,pr ...
最新文章
- Spring源码分析【7】-Spring 模板页和JSP文件的编译
- 我的北大故事:犯其至难图其至远!
- Java8新特性学习记录
- git checkout和git reset的一些区别以及配置git简写命令
- ASP.NET MVC WebAPI 资源整理
- Machine Learning实验3】SoftMax regression
- 转://Oracle 复合压缩索引场景及性能对比
- linux虚拟机上离线安装mysql_Linux下离线安装MySQL
- 关于Postgre中的Timestamp(时间戳)格式。
- c java python php_php c java python 语言对比
- DDC——Deep Domain Confusion Maximizing for Domain Invariance
- FreeSWITCH channel variables(信道变量)
- Pandas库基础知识(一)
- RGB格式转换的实现
- ipad上写代码???阿里云+vscode-server助你一臂之力
- 《Mini-Me: An Adaptive Avatar for Mixed Reality Remote Collaboration》论文笔记
- Compilation is not supported for following modules
- 使用 163 邮箱接收 ASP.NET 用户反馈
- 南充一中2021成绩查询高考,2021年南充一中升学率高不高?
- 用友通T3联不上服务器