nginx 常用的location rewrite proxy_pass
location
以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
以^~ 开头,表示uri以某个常规字符串开头,如果匹配到,则不继续往下匹配。不是正则匹配
以~ 开头,表示区分大小写的正则匹配;
以~* 开头,表示不区分大小写的正则匹配
以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到
*注意 location xxx {} 其中xxx与括号之间很多时候需要空格,最好都加上
匹配顺序:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)
rewrite
rewrite只能放在 server{}, location{}, if{}中,并且只能对域名后的文件路径起作用。
执行顺序
- 执行server块的rewrite指令
- 执行location匹配
- 执行选定的location中的rewrite指令
语法
rewrite regex replacement [flag];
flag
这儿分为server级和location级,其中if可写在server和location中,分别对应server级和location级。同级别中执行顺序看书写顺序。
last : 不再执行同级rewrite,写在location中重新匹配location.
break : 不再执行同级rewrite,继续往下执行,不重新匹配location;
redirect : 返回302临时重定向,地址栏会显示跳转后的地址
permanent : 返回301永久重定向,地址栏会显示跳转后的地址
当不写flag时,再次循环同级匹配
if(condition)
当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
直接比较变量和内容时,使用=或!=
~ 正则表达式匹配
~* 不区分大小写的匹配
!~ 区分大小写的不匹配
-f和!-f 用来判断是否存在文件
-d和!-d 用来判断是否存在目录
-e和!-e 用来判断是否存在文件或目录
-x和!-x 用来判断文件是否可执行
其他
调试
default_type application/json;
在locaiton中 return 200 '$uri xxx'
变量
set $a "1"
if ($a = "1") {
return 302
}
proxy_pass
proxy_pass http://127.0.0.1:8008/;
这里只讨论在location中的proxy_pass;
1、 location 使用非正则匹配
location /api {
# 1. proxy_pass http://127.0.0.1:8008/a;
# 2. proxy_pass http://127.0.0.1:8008;
}
- 1中 端口后面有"/" ,访问/api/test → /a/test;(匹配剩余的地址为/test,再将地址拼接到代理地址中)
- 2中 端口后面没有"/" ,访问/api/test → /api/test
此处要注意,并不是uri最后是否有"/",是端口后面是否有"/"
2、location 使用正则匹配
location ~ /api/ {
proxy_pass http://127.0.0.1:8008;
}
- 端口后面不加/,可行。
- 端口后面加/,则必须使用变量(任何变量都行,让其使用第3条规则)。因为代理地址会自动加上匹配剩余的uri,代理去正则匹配剩余的uri会使地址乱套。
3、如果proxy_pass后面有变量,直接去的那个地址,跳出1 2条规则。
举例
server {
listen 80;
rewrite /a(.*) /b$1;
rewrite /b(.*) /c$1 last;
rewrite /c(.*) /d$1 break;
location / {
if ($uri ~ /d/) {
rewrite /d/(.*) /api/$1 last;
}
return 200 '$uri';
}
location /api {
proxy_pass http://127.0.0.1:8000/test; #端口号后面有/,代理删掉/api。
}
location ~ /t/(.*)/t {
proxy_pass http://127.0.0.1:8000/test1/$1;
#proxy_pass http://127.0.0.1:8000/test1; 写法报错,必须使用变量,使用第3条代理规则。
}
}
- 访问/test 返回 /test
- 访问/aaa 返回 /caa
- 访问/api 返回 /cpi
- 访问/d/dd 代理去
http://127.0.0.1:8000/test/dd - 访问/ee/t/test2/t/every 代理去
http://127.0.0.1:8000/test1/test2
nginx 常用的location rewrite proxy_pass的更多相关文章
- Nginx 常用全局变量 及Rewrite规则详解
每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...
- 前端开发掌握nginx常用功能之rewrite
上一篇博文对nginx最常用功能的server及location的匹配规则进行了讲解,这也是nginx实现控制访问和反向代理的基础.掌握请求的匹配规则算是对nginx有了入门,但是这些往往还是不能满足 ...
- Nginx常用伪静态规则(rewrite)-Discuz X3.2-WordPress-PHPCMS-ECSHOP-SHOPE(转)
当我们从apache服务器转向Nginx服务器的时候,它们的伪静态规则就不一样了,所以你熟悉Nginx服务器的伪静态规则,自己写当然也好.不了解Nginx服务器的伪静态规则的,为方便各位站长,收集了这 ...
- Nginx下的location,upstream,rewrite 和 proxy_pass使用总计大全
一 . location: 顾名思义-->地址,也叫路由. nginx服务器非常核心的配置,一般nginx运维人员在修改nginx配置时,大部分也是围绕着location这个配置进行修改. 下面 ...
- Nginx教程(四) Location配置与ReWrite语法
Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {- } ...
- Nginx教程(四) Location配置与ReWrite语法 (转)
Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {… } ...
- Nginx中的 location 匹配和 rewrite 重写跳转
Nginx中的location匹配和rewrite重写跳转 1.常用的Nginx正则表达式 2.location 3.rewrite 4.rewrite实例 1.常用的Nginx正则表达式: ^ :匹 ...
- Nginx中的Location和Rewrite
Nginx中的Location和Rewrite 目录 Nginx中的Location和Rewrite 一.location 1. location的分类 2. location常用的匹配规则 3. l ...
- 17.Nginx 重写(location rewrite)
Nginx 重写(location / rewrite) 目录 Nginx 重写(location / rewrite) 常见的nginx正则表达式 location lication的分类 loca ...
随机推荐
- 引入jquery时,页面一直加载
注意jquery的引用位置最好放在<head>下面.
- Pandas | 28 与SQL比较
由于许多潜在的Pandas用户对SQL有一定的了解,因此本文章旨在提供一些如何使用Pandas执行各种SQL操作的示例. 文件:tips.csv - total_bill,tip,sex,smoker ...
- Windows WoW64浅析
WOW64(Windows-On-Windows 64bit)是X64 Windows操作系统的一个子系统,为32位应用程序提供运行环境.类似的还有WOW32子系统,负责在32位Windows系统上运 ...
- zabbix-钉钉报警媒介
(1)第三方报警平台(钉钉) 先指定要发送的群,在群里创建机器人 添加机器人 可以参考 “说明文档” 创建测试文档 vim ceshi.sh curl 'https://oapi.dingta ...
- L1和L2正则化(转载)
[深度学习]L1正则化和L2正则化 在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况 ...
- SQL 变形
需求:共有协议X份,已签XX份,待签X份 sql: select count(1) 总记录数, sum(case when XY_STATUS='1' then 1 else 0 end)待签, su ...
- [cf113d]Museum
传送门 Solution 设一个状态为 \((x,y)\) 表示两人在的位置,求出每个状态期望出现的次数 设一个状态为 \(u\) , \(x_u^0=[u==(a,b)]\) 所以一个状态出现的次数 ...
- c++隐式转换(implicit conversion)
1.缘由 最近在使用nlohmann的json,发现有些地方不是特别好用,所以就想自己修改一下(目的是为了增加类似jsoncpp中可以//增加注释的功能),在看源码的时候看到了一个迷惑的地方,就是解析 ...
- 关联分析-MIC
MIC:the Maximal Information Coefficient,是用网格分法判断数据的集中程度的一个标准. MIC所依据的理念是,如果2个变量之间存在着一种关系,那么就应该有一种方法在 ...
- Scala 在挖财的应用实践
编者按:本文是根据ArchSummit 大会上挖财资深架构师王宏江的演讲<Scala 在挖财的应用实践>整理而成. 这次分享有三个方面,一是介绍一下挖财当前的开发情况和后端的架构, 二是挖 ...