1

我有一个简单的 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 在这方面的文档似乎很模糊。

它变得超级令人沮丧。我们有其他代理工作正常,没有做任何特别的事情。

4

1 回答 1

1

这似乎很奇怪。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 文档

于 2018-11-19T09:54:28.470 回答