我有一个简单的apigee代理,但是在跟踪中可以看到一个问题,其中去往目标的Host标头包含代理本身的主机。
即目标得到
Host: xx.apigeename.com
而不是:
Host: my.awsservername.com
目标服务器与代理服务器位于不同的域上,因此,这意味着目标服务器未正确处理请求(在这种情况下为404)。
为什么Apigee可能会发送完全相同的主机头而不进行转换?
我尝试通过设置TargetEndpoint来显式设置它:
<TargetEndpoint name="xyzzy">
<Description/>
<FaultRules/>
<PreFlow name="PreFlow">
<Request>
<Headers>
<Header name="Host">{target.host}</Header>
</Headers>
</Request>
<Response>
</Response>
</PreFlow>
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
<Flows/>
<HTTPTargetConnection>
<Properties/>
<URL>https://{targetBackend}/xyzzy</URL>
<SSLInfo>
<Enabled>true</Enabled>
<Protocols>
<Protocol>TLSv1.2</Protocol>
</Protocols>
</SSLInfo>
</HTTPTargetConnection>
</TargetEndpoint>
Apigee关于此的文档似乎很模糊。
它变得越来越令人沮丧。我们还有其他代理可以正常运行,而无需执行任何特殊操作。
答案 0 :(得分:0)
这似乎很奇怪。 Apigee默认情况下不应该这样做。您确定其他流程设置正确吗?无论如何,您可以尝试创建添加正确主机的AssignMessage
策略。
看一下这个:https://docs.apigee.com/api-platform/reference/policies/assign-message-policy#Samples
./ policies / hostPolicy.xml:
<AssignMessage name="hostPolicy" continueOnError="false">
<AssignTo createNew="false" type="request"></AssignTo>
<Set>
<Headers>
<Header name="Host">{target.host}</Header>
</Headers>
</Set>
</AssignMessage>
./ targets / xyzzy.xml
<PreFlow name="PreFlow">
<Request>
<Step>
<Name>hostPolicy</Name>
</Step>
</Request>
</PreFlow>
注意:我还没有测试过。阅读有关政策的模糊apigee文档