Nginx匹配规则

1、url匹配

用途:
    分流
    单接口异常处理

#nginx http 块加上
upstream testapi{
   server 10.0.1.221:80 weight=1;
   server 10.0.1.205:80 weight=1;
}
#nginx server 块加上
location ~doors/open|call/photo|rooms {
    proxy_pass http://testapi;
    proxy_redirect default;
}
2、Nginx代理proxy pass配置去除前缀
2.1、默认转发
使用Nginx做代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。
比如,访问abc.com/appv2/a/b.html, 要求转发到localhost:8088/appv2/a/b.html
简单配置如下:
upstream one {
  server localhost:8088 weight=5;
}
server {
    listen              80;
    server_name         abc.com;
    access_log  "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G"  main;
    location / {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://one;
    }
}
即,设置proxy_pass即可。请求只会替换域名。

2.2、转发不同服务

但很多时候,我们需要根据url的前缀转发到不同的服务。

比如:

abc.com/user/profile.html转发到 用户服务localhost:8089/profile.html

abc.com/order/details.html转发到 订单服务 localhost:8090/details.html

即,url的前缀对下游的服务是不需要的,除非下游服务添加context-path, 但很多时候我们并不喜欢加这个。如果Nginx转发的时候,把这个前缀去掉就好了。

#一个种方案是proxy_pass后面加根路径/.
server {
    listen              80;
    server_name         abc.com;
    access_log  "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G"  main;
    location ^~/user/ {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://user/;
    }
    location ^~/order/ {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://order/;
    }
}
^~/user/表示匹配前缀是user的请求,proxy_pass的结尾有/, 则会把/user/*后面的路径直接拼接到后面,即移除user.
##另一种方案是使用rewrite
upstream user {
  server localhost:8089 weight=5;
}
upstream order {
  server localhost:8090 weight=5;
}
server {
    listen              80;
    server_name         abc.com;
    access_log  "pipe:rollback /data/log/nginx/access.log interval=1d baknum=7 maxsize=1G"  main;
    location ^~/user/ {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        rewrite ^/user/(.*)$ /$1 break;
        proxy_pass http://user;
    }
    location ^~/order/ {
        proxy_set_header Host $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        rewrite ^/order/(.*)$ /$1 break;
        proxy_pass http://order;
    }
}
注意到proxy_pass结尾没有/, rewrite重写了url。
3、代理端口改变问题
server {
    listen       8181;
    server_name  XXX.XXX.com;
    #charset koi8-r;
    access_log  /logs/web/ddflow.ddapi.pub.log  public_jsonlog;
    gzip on;
    gzip_min_length  5k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 3;
    gzip_types     text/css application/javascript image/jpeg image/png image/svg+xml application/vnd.ms-fontobject image/tiff application/font-woff;
    gzip_vary on;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    location ~^/open_api/d_d/visitorList/v1/ {
        return 200;
        default_type 'application/json;charset=utf-8;';
    }
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host:$server_port; #去除$server_port;端口不会发生变化
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 50M;
        proxy_connect_timeout 300s;
        proxy_send_timeout 600s;
        proxy_read_timeout 600s;
    }
}

 

posted @ 2020-12-26 22:45  Buster_Hsueh  阅读(218)  评论(0编辑  收藏  举报