Поддержка переписывания (rewrites)#

ANIC позволяет менять URI запроса перед отправкой в приложение, например, вы можете переписать /tea/green в /green. Для настройки изменения URI необходимо использовать ActionProxy в VirtualServer или VirtualServerRoute.

Пример с префиксом в пути#

В следующем примере нагрузка между двумя приложениями, требующими изменения URI, балансируется с помощью префиксного сопоставления:

apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
  name: cafe
spec:
  host: cafe.example.com
  upstreams:
  - name: tea
    service: tea-svc
    port: 80
  - name: coffee
    service: coffee-svc
    port: 80
  routes:
  - path: /tea/
    action:
      proxy:
        upstream: tea
        rewritePath: /
  - path: /coffee
    action:
      proxy:
        upstream: coffee
        rewritePath: /beans

Изменения URI для tea-svc (обратите внимание, что запросы к /tea перенаправляются на /tea/):

Исходный URI

Переписанный URI

/tea/

/

/tea/abc

/abc

Изменения URI для coffee-svc:

Исходный URI

Переписанный URI

/coffee

/beans

/coffee/

/beans/

/coffee/abc

/beans/abc

Пример с регулярными выражениями#

Если путь представляет собой регулярное выражение, а не префикс или точное соответствие, rewritePath может содержать группы захвата $1-9.

Пример:

apiVersion: k8s.angie.software/v1
kind: VirtualServer
metadata:
  name: cafe
spec:
  host: cafe.example.com
  upstreams:
  - name: tea
    service: tea-svc
    port: 80
  routes:
  - path: ~ /tea/?(.*)
    action:
      proxy:
        upstream: tea
        rewritePath: /$1

В этом примере группа захвата (.*) используется в rewritePath как /$1. Это необходимо для передачи оставшейся части URI запроса (после /tea).

Примеры изменения URI для tea-svc:

Исходный URI

Переписанный URI

/tea

/

/tea/

/

/tea/abc

/abc