您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页nginx 常用的location rewrite proxy_pass

nginx 常用的location rewrite proxy_pass

来源:伴沃教育
location
匹配顺序:

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

rewrite

rewrite只能放在 server{}, location{}, if{}中,并且只能对域名后的文件路径起作用。

执行顺序
语法

rewrite regex replacement [flag];

flag
if(condition)
其他
调试
   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会使地址乱套。
举例
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条代理规则。
  }
}
  1. 访问/test 返回 /test
  2. 访问/aaa 返回 /caa
  3. 访问/api 返回 /cpi
  4. 访问/d/dd 代理去 http://127.0.0.1:8000/test/dd
  5. 访问/ee/t/test2/t/every 代理去 http://127.0.0.1:8000/test1/test2

转载于:https://www.cnblogs.com/gsgs/p/11497587.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务