我的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
我不愿透露以下几点:
如何使用nginx配置中使用的$ request_uri在虚拟服务中进行复制
使用上述虚拟服务,它将完全将调用重定向到“ static-qa-uscentral1.company.com”,我在“ virtualservice” yaml的“ authority”参数中提到了该调用。我该如何实现nginx在proxy_pass期间所做的工作,该操作不会更改URL,但仍会获取重定向URL的内容。
答案 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,该功能实际上允许在代理中注入任意代码以处理请求。