Конфигурация 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