Apache SGW для прокси-запросов на основе заголовка между двумя бэкэндамиApache

Ответить
Anonymous
 Apache SGW для прокси-запросов на основе заголовка между двумя бэкэндами

Сообщение Anonymous »

У меня есть код в файле app1.part, который находится в каталоге site-enabled/. Существует множество других приложений, которые запрашивают службу Service GW, и Apache должен перенаправлять запросы на резервное приложение.
Конфигурация AS-IS выглядит следующим образом:


ProxyPassMatch http://api1.com/$2

Use SetXappUser
RequestHeader set X-Forwarded-Prefix "/rest/client/api/"



Поэтому моя логика заключается в том, что когда Apache видит запрос /client/api/entry-point, он отправляет запрос на внутренний API1, и он становится http://api1.com/rest/client/api/entry-point.
То, что мне нужно, на основе заголовка X-APP-USER (другое приложение, которое пытается получить Приложение API1 через службу GW) заключается в пересылке запросов приложения A к API1 и других запросов приложений, таких как B, C и D, на другой API2, который также был создан в k8s. Итак, у меня есть две службы, предоставляющие API1 (http://api1-vip.com) и API2 (http://api2.com).
Как заставить его работать в конфигурации Apache?
Этот код не работает..



RewriteEngine On

Use SetXappUser
RequestHeader set X-Forwarded-Prefix "/rest/client/api/"

# Set environment variable based on header
SetEnvIf X-APP-USER "^A$" IS_VIP_USER=1

# Route all requests from A1 user to the VIP backend API2
RewriteCond %{ENV:IS_VIP_USER} =1
RewriteCond %{REQUEST_URI} ^/client/api/(.*)$
RewriteRule ^/rest/client/api/(.*)$ http://api2-vip.com/rest/client/api/$1 [P,L]

# All other users routed to the default backend API1
RewriteCond %{ENV:IS_VIP_USER} !=1
RewriteCond %{REQUEST_URI} ^/client/api/(.*)$
RewriteRule ^/rest/client/api/(.*)$ http://api1.com/rest/client/api/$1 [P,L]



Этот блок конфигурации Apache:
  • Сопоставляет любой запрос с /rest/customer/api/... (без учета регистра).
  • Извлекает заголовок X-APP-USER; если он равен A, устанавливается флаг среды IS_VIP_USER=1.
  • Если VIP-пользователь: перенаправляет запрос на http://api2-vip.com/....
  • Иначе: перенаправляет на серверную часть по умолчанию http://api1.com/....
  • Добавляет заголовок X-Forwarded-Prefix поэтому серверная часть знает исходный путь запроса.
    Короче: он условно перенаправляет пользователей к различным серверным API на основе их заголовка X-APP-USER.
но в журналах (трассировка при моде перезаписи) я вижу, что он пытается получить статический файл и завершается с ошибкой, например
AH00128: File does not exist: /var/www/rest/client/api/entry-point
pass through /rest/client/api/entry-point
init rewrite engine with requested uri /rest/client/api/entry-point
[perdir (?i)(/rest/client/api/)(.*)/] add path info postfix: /var/www/rest/client -> /var/www/rest/client/api/entry-point
[perdir (?i)(/rest/client/api/)(.*)/] applying pattern '^/rest/client/api/(.*)$' to uri '/var/www/rest/client/api/entry-point



Подробнее здесь: https://stackoverflow.com/questions/797 ... o-backends
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Apache»