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 文档
我有一个简单的 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 文档