#apigee
#apigee
Вопрос:
Наша конфигурация Apigee выглядит примерно так:
Netscaler LB -> Маршрутизатор / обработчик сообщений Apigee -> Netscaler LB — Целевые серверы
Целевой сервер в данном случае является приложением Java с Jersey, и я использую Jersey @Context для извлечения соответствующей информации URI, чтобы задать, например, заголовки Location, но все детали запроса, похоже, относятся к Netscaler, а не к исходному запросу.
Если мы используем политику AssignMessage и вручную устанавливаем URL-адрес X-Forwarded-Host в качестве URL-адреса, который вызывает клиент, тогда все работает так, как должно работать. К сожалению, похоже, что нет переменной, которую мы могли бы использовать вместо ее жесткого кодирования — все в документах вокруг переменных, похоже, указывает, что вы можете получить пути только после самого домена.
Комментарии:
1. По сути, я пытаюсь сделать то, что сделано в этом видео — youtube.com/watch?v=Id_yQ5e6sgw — но без жестко запрограммированной части.
Ответ №1:
Находясь в <ProxyEnpoint>
сегменте запроса, вы можете ссылаться на переменную request.header.host
, и она предоставит вам хост, который клиент запросил в Apigee.
Например, если ваш URI являетсяhttps://myorg-test.apigee.net/resource , request.header.host
в сегменте запроса ProxyEndpoint будет иметь значение myorg-test.apigee.net
.
Если вы попытаетесь сослаться на это в TargetEndpoint
, возможно, оно уже перезаписано на серверном узле для целевого запроса. Если вам это нужно в targetEndpoint, сначала назначьте его переменной в ProxyEndpoint/PreFlow/Request
, а позже вы сможете ссылаться на переменную originalHost
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="grabOriginalHost">
<AssignVariable>
<Name>originalHost</Name>
<Ref>request.header.host</Ref>
</AssignVariable>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>
Комментарии:
1. Спасибо — так вы бы порекомендовали использовать это значение вместо X-Forwaded-Host тогда? Я обнаружил, что X-Forwarded-Host также работает, если он установлен в Netscaler, который находится перед Apigee.