Регулярное выражение в URI для передачи прокси

У меня есть следующий конфиг в моем 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. как использовать этот $request_uri, используемый в конфигурации nginx для репликации в виртуальном сервисе

  2. используя вышеупомянутый виртуальный сервис, он будет полностью перенаправлять вызовы на static-qa-uscentral1.company.com, о которых я упоминал в параметре полномочия в yaml "virtualservice". Как я могу добиться того, что nginx делает во время proxy_pass, который не меняет URL, но все равно получает содержимое перенаправленного URL.

1 ответ

Возможно, вы могли бы использовать фильтр Istio Envoy, возможно, вы захотите проверить другие параметры перезаписи для Envoy HTTP маршрутизации.

Вы можете взглянуть на Katacoda Migrating от NGINX до Envoy Proxy. На шаге 4 они показывают пример proxy_pass,

Regex будет соответствовать стилю ECMAscript на основе регулярных выражений, вы даже можете взглянуть на исходный код виртуальной службы Istio.

Вам нужно будет либо удалить 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, которые позволяют по существу вводить произвольный код в прокси для обработки запросов.

Другие вопросы по тегам