Apigee代理将相同的主机标头传递给目标

时间:2018-10-29 11:44:43

标签: apigee apigee-baas

我有一个简单的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关于此的文档似乎很模糊。

它变得越来越令人沮丧。我们还有其他代理可以正常运行,而无需执行任何特殊操作。

1 个答案:

答案 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文档