URI中的正则表达式用于代理传递

时间:2019-06-13 13:11:45

标签: kubernetes istio

我的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的内容。

1 个答案:

答案 0 :(得分:0)

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

您可以查看Katacoda Migrating from NGINX to Envoy Proxy。在步骤4 中,它们显示了proxy_pass的示例。

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

您需要删除Istio并设置NGINX Ingress Controller,或者在Ingress Controller后面设置Istio,以便它将基于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,该功能实际上允许在代理中注入任意代码以处理请求。