我们的Apigee配置看起来像这样:
Netscaler LB-> Apigee路由器/消息处理器-> Netscaler LB-目标服务器
在这种情况下,目标服务器是带有Jersey的Java应用程序,并且我正在使用Jersey @Context检索相关的URI信息以设置例如Location头,但是所有请求细节似乎都与Netscaler有关,而不是源于要求。
如果我们使用AssignMessage策略并手动将X-Forwarded-Host URL设置为客户端调用的URL,那么一切都会正常进行。不幸的是,似乎没有一个可用的变量,而不是对此进行硬编码-围绕该变量的文档中的所有内容似乎都表明您只能在域本身之后获取路径。
在<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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句