【问题标题】:regex in URI for proxy passingURI 中用于代理传递的正则表达式
【发布时间】:2019-07-01 22:44:15
【问题描述】:

我的 nginx 中有以下配置:

location / {
    if ($request_uri ~* ^/checkout/(dev-dist|dist|images|js|libs|resources|angular4-hybrid|bundle.js)) {

proxy_pass http://static-qa-uscentral1.company.com/hybrid/live$request_uri;
            break;
        }
}

我正在尝试在 istio 的虚拟服务中复制它

我已经编写了以下虚拟服务来匹配这个正则表达式:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: routes-static
  namespace: mui-relqa
spec:
  gateways:
  - my-gateway
  hosts:
  - "*"
  http:
  - match:
    - uri:
        regex: '^./checkout/(dev-dist|dist|images|js|libs|resources|angular4-hybrid|bundle.js).*$'
    redirect:
      authority: static-qa-uscentral1.company.com
      uri: /hybrid/live

有几件事我很想弄清楚:

  1. 如何使用 nginx 配置中使用的 $request_uri 在虚拟服务中进行复制

  2. 使用上面的虚拟服务,它将完全重定向到“static-qa-uscentral1.company.com”的调用,我在“virtualservice”yaml 的“authority”参数中提到过。如何实现 nginx 在 proxy_pass 期间所做的事情,它不会更改 URL 但仍会获取重定向 URL 的内容。

【问题讨论】:

    标签: kubernetes istio


    【解决方案1】:

    您可能会使用 Istio Envoy 过滤器,您可能想检查 Envoy HTTP routing 的其他重写选项。

    你可以看看Katacoda Migrating from NGINX to Envoy Proxy。在第 4 步中,他们展示了proxy_pass 的示例。

    Regex 将匹配基于 ECMAscript 样式的正则表达式,您甚至可以查看 Istio Virtual Service source code

    您需要删除Istio 并改为设置NGINX Ingress Controller,或者在Istio 后面设置Ingress Controller,以便它基于nginx.conf 或使用Nginx Annotations 重定向和/或代理流量。

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/server-snippet: |
     set $agentflag 0;
    
     if ($http_user_agent ~* "(Mobile)" ){
     set $agentflag 1;
     }
    
     if ( $agentflag = 1 ) {
     return 301 https://m.example.com;
     }
    

    更新

    OP 提到了这一点,Envoy 还支持Lua scripting,它本质上允许在代理中注入任意代码来处理请求。

    【讨论】:

    • 我一直在阅读有关如何仅使用 istio 组件完成此操作的更多信息。我找到了“envoyFilters”,我们可以在其中编写 LUA 代码来处理这样的事情。你对使用 envoyFilters 有什么建议吗?我真的不能回到 nginx 入口控制器。我们所有的练习都是完全删除 nginx 入口并仅使用 istio-ingressgateway。因此,istio 应该做 TLS 终止、路由、标头操作、条件标头等所有事情。
    • @Stunn3r,你是对的,我已经更新了我的答案。也许这会更有帮助。
    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2011-01-21
    • 2015-07-25
    相关资源
    最近更新 更多