Apigee 代理将同一主机 header 传递给目标

Apigee Proxy passing same host header to target

我有一个简单的 apigee 代理,但我可以在跟踪中看到一个问题,即前往目标的主机 header 包含代理本身的主机。

即目标获得

Host: xx.apigeename.com

而不是:

Host: my.awsservername.com

目标与代理位于不同的域,因此这意味着目标服务器未正确处理请求(在本例中为 404)。

为什么 Apigee 可能会发送完全相同的主机 header 而不是对其进行转换?

我试图通过设置 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 关于此的文档似乎非常模糊。

它变得非常令人沮丧。我们还有其他代理,无需执行任何特殊操作即可正常工作。

这看起来很奇怪。默认情况下,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 文档