регулярное выражение в URI для передачи прокси - PullRequest
0 голосов
/ 13 июня 2019

У меня есть следующая конфигурация в моем 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 Ответ

0 голосов
/ 19 июня 2019

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

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

...