nginx匹配(xxx(sss(xxx并将其反向代理成 sss(xxx处理示例



需求:因为只有一个端口,但是有多个服务,所以需要以路径匹配服务的方式访问项目,但是项目使用了网关,所

以会在访问以及跳转路径上加上/pdc-web/导致接口地址/sss/**改变为/pdc-web/sss/**,导致接口访问404。此处的解决办

法使用nginx的正则表达式的方式来匹配动态接口(/pdc-web/不固定有可能是/pdc/,这个是运维人员命名的),使用

$1$2获取匹配接口的有效部分(/sss/**,既是用()括出来的部分),使用$query_string来传递参数。

1
   server {
2          listen  10991 ;
3          server_name 192.168.100.202;
4          charset utf-8;
5          proxy_set_header X-RESQUEST-AGREEMENT http;
6          proxy_set_header X-HTTP-HOST $http_host;
7          proxy_set_header X-RESQUEST-URI $request_uri;
8  //网关的反向代理
9          location ~ ^/?.*(/sss/)(.*) {
10                  if ( $query_string = '' ) {
11                    proxy_pass  http://192.168.30.79:8888$1$2;
12                  }
13                  proxy_pass  http://192.168.30.79:8888$1$2?$query_string;
14          }
15
16  //以路径匹配服务  pdc
17          location /pdc-web/ {
18                  alias html/pdc/;
19                  index index.html index.htm;
20          }
21          location /dma/ {
22                  proxy_pass  http://192.168.30.79:8888/dma/;
23          }
24  //服务pdc的方向代理接口
25          location /pdc/ {
26                  proxy_pass  http://192.168.30.79:8888/pdc/;
27          }
28  //网关
29          location / {
30                  root   html/gateway/;
31                  index  index.html index.htm;
32          }
33          error_page   500 502 503 504  /50x.html;
34          location = /50x.html {
35                  root   html;
36          }
37      }
38

正则表达式解释:~ ^/?.*(/sss/)(.*)

1、~ 开启正则表达式

注意~与 ^ 之间由空格,正则表达式由 ^开始,

~ 区分大小写匹配

~* 不区分大小写匹配

!和!*分别为区分大小写不匹配及不区分大小写不匹配

^ 以什么开头的匹配

$ 以什么结尾的匹配

\ 转义字符。可以转. * ?等

* 代表任意字符

= 表示精确的查找地址,

2、^/?

^表示开始位置,/?表示有0或1个/

3、.*

.* 匹配任意次的非\n与\r之外的字符

匹配除“\n”和"\r"之外的任何单个字符。要匹配包括

. 点 “\n”和"\r"在内的任何字符,请使用像“[\s\S]”的模

式。

4、 (/sss/)

正则子表达式 匹配 /sss/;也是$1 取得值

5、(.*)

同3 ; $2 是指获取正则表达式匹配结果的第二个分组(也就是第二个括号中的内容)

6、$query_string

Nginx里面$query_string 与$args相同,存储了所提交的所有$query_string;比如&p=2887&q=test

如果想要在nginx里面单独访问这些变量。可以这样

比如$p变量可以这样访问 $arg_p