繁体   English   中英

Nginx 反向代理正则表达式过滤器

[英]Nginx Reverse Proxy Regex Filter

我正在将 NodeJS 反向代理从 Apache 迁移到 Nginx。 最后要解决的问题是如何过滤我的 NodeJS 后端的传入 URI。

无论出于何种遗留原因,NodeJS API 响应诸如example.com/route/1001之类的 URI,而 Apache 前端和所有客户端代码实际上都发送到example.com/api/route/1001因此我希望剥离/api 部分的请求 URI 并仅将后半部分发送到节点 API。

我在 Regxr 中玩耍,试图让它正确,结果(?!api)\b\S+做得很好:regexr.com/4lp4e

但是,我不熟悉如何将其放入变量的 Nginx 语法。 这是我现在拥有的:

server {
  server_name <domain>;

  access_log  /var/log/nginx/<domain>-access.log;

  # API endpoint -  (?!api)\b\S+
  location /api {
    if ($request_uri ~* ((?!api)\b\S+) ) {
      set  $last $1;
    }
    add_header X-uri "$last";
    rewrite /api /$last break;
    #proxy_redirect off;
    proxy_pass http://127.0.0.1:4000;
  }

  listen 80;
  listen [::]:80;
}

尝试在代理通行证的末尾添加尾随/

proxy_pass http://127.0.0.1:4000/;

没有尾随/ ,将传递完整路径:
http://127.0.0.1:4000/app/something

使用尾随/ ,位置模式/app将替换为/
http://127.0.0.1:4000/something

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM