我们的Apigee配置看起来有点像这样:
Netscaler LB - > Apigee路由器/消息处理器 - > Netscaler LB - 目标服务器
在这种情况下,目标服务器是与Jersey的Java应用程序,我使用Jersey @Context检索相关的URI信息以设置例如Location头,但所有请求详细信息似乎都与Netscaler而不是原始请求。
如果我们使用AssignMessage策略并手动将X-Forwarded-Host URL设置为客户端调用的URL,那么一切都可以正常工作。遗憾的是,似乎不是我们可以使用的变量而不是硬编码 - 围绕变量的文档中的所有内容似乎都表明您只能在域本身之后获取路径。
答案 0 :(得分:0)
在<ProxyEnpoint>
请求段中,您可以引用变量request.header.host
,它将为您提供客户端向Apigee请求的主机。
例如,如果URI为https://myorg-test.apigee.net/resource,则ProxyEndpoint的请求段中的request.header.host
的值为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>