您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
API 代理充当公开端点到后端服务的映射。 虚拟主机定义了面向公众的 API 代理向应用公开的方式。例如,虚拟主机可确定是否可以使用 TLS 访问 API 代理。配置 API 代理时,请修改其 ProxyEndpoint 定义以配置其使用的虚拟主机。
TargetEndpoint 是 ProxyEndpoint 的出站对等项。TargetEndpoint 充当从 Edge 到后端服务的 HTTP 客户端。创建 API 代理时,您可以将其配置为使用零个或多个 TargetEndpoint。
了解详情:
配置 TargetEndpoint 或 TargetServer
如需配置 TargetEndpoint,请修改定义 TargetEndpoint 的 XML 对象。您可以通过以下方式修改 TargetEndpoint:修改 API 代理中定义 TargetEndpoint 的 XML 文件,或在 Edge 管理界面中进行修改。
如需使用 Edge 管理界面修改 TargetEndpoint,请执行以下操作:
- 登录 Edge 管理界面 (https://enterprise.apigee.com)。
- 选择要更新的 API 代理的名称。
- 选择开发标签页。
- 在目标端点下,选择默认。
- 在代码区域中,系统会显示 TargetEndpoint 定义,如下所示:
<TargetEndpoint name="default"> <Description/> <FaultRules/> <Flows/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <HTTPTargetConnection> <Properties/> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://mocktarget.apigee.net</URL> </HTTPTargetConnection> </TargetEndpoint> - 按照下文关于后端 TLS 配置中的说明配置信任库。
- 进行任意更改,然后保存代理。如果 API 代理已部署,保存它会使用新设置重新部署它。
请注意,TargetEndpoint 定义包含 name 属性。您可以使用 name 属性的值来配置 API 代理的 ProxyEndpoint 定义,以使用 TargetEndpoint。
如需了解详情,请参阅 API 代理配置参考文档。
您可以将 TargetEndpoint 配置为引用 TargetServer,而不是显式目标网址。TargetServer 配置将具体的端点网址与 TargetEndpoint 配置分离。TargetServer 用于支持跨多个后端服务器实例的负载均衡和故障切换。
下面显示了一个 TargetServer 定义示例:
<TargetServer name="target1"> <Host>mocktarget.apigee.net</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
在 TargetEndpoint 定义的 <HTTPTargetConnection> 元素中,TargetServer 通过名称引用。
您可以配置一个或多个已命名的 TargetServer,如下所示。
<TargetEndpoint name="default">
...
<HTTPTargetConnection>
<LoadBalancer>
<Server name="target1" />
<Server name="target2" />
</LoadBalancer>
<Path>/test</Path>
</HTTPTargetConnection>
...
</TargetEndpoint>如需了解详情,请参阅跨后端服务器的负载均衡。
关于与后端之间的 TLS 配置
在配置后端 TLS 访问权限之前,您应了解以下两点重要信息:
- 默认情况下,Edge 不会验证后端证书。您必须创建信任库,才能配置 Edge 来验证证书。
- 使用引用来指定 Edge 使用的密钥库或信任库。
下文介绍了这两种注意事项。
定义信任库以启用证书验证
通过 TargetEndpoint 或 TargetServer 发出 TLS 请求时,Edge 默认不会 验证从后端服务器收到的 TLS 证书。这意味着 Edge 不会验证以下内容:
- 该证书已由受信任的 CA 签名。
- 证书未过期。
- 证书显示常用名。如果存在公用名,Edge 不会验证该公用名是否与网址中指定的主机名匹配。
如需配置 Edge 以验证后端证书,您必须执行以下操作:
- 在 Edge 上创建信任库。
- 将服务器的证书或证书链上传到信任库。 如果服务器证书由第三方签名,则您需要将完整的证书链(包括根 CA 证书)上传到信任库。 没有隐式信任的 CA。
- 将信任库添加到 TargetEndpoint 或 TargetServer 定义中。
如需了解详情,请参阅密钥库和信任库。
例如:
<TargetEndpoint name="default">
…
<HTTPTargetConnection>
<SSLInfo>
<Enabled>true</Enabled>
<TrustStore>ref://myTrustStoreRef</TrustStore>
</SSLInfo>
<URL>https://myservice.com</URL>
</HTTPTargetConnection>
…
</TargetEndpoint>使用对密钥库或信任库的引用
以下示例展示了如何配置 TargetEndpoint 或 TargetServer 以支持 TLS。在配置 TLS 时,您需要在 TargetEndpoint 或 TargetServer 定义中指定信任库和密钥库。
Apigee 强烈建议您在 TargetEndpoints 或 TargetServer 定义中使用对密钥库和信任库的引用。使用引用的优势在于,您只需更新引用以指向其他密钥库或信任库,即可更新 TLS 证书。
TargetEndpoints 或 TargetServer 定义中对密钥库和信任库的引用与虚拟主机中的引用工作方式相同。
将 TargetEndpoint 或 TargetServer 转换为使用引用
您可能已有使用密钥库和信任库字面名称的 TargetEndpoint 或 TargetServer 定义。如需转换 TargetEndpoint 或 TargetServer 定义以使用引用,请执行以下操作:
- 更新 TargetEndpoint 或 TargetServer 定义以使用引用。
- 重启 Edge 消息处理器:
- 对于公有云客户,请与 Apigee Edge 支持团队联系以重启消息处理器。
- 对于私有云客户,请一次重启一个 Edge 消息处理器。
- 确认您的 TargetEndpoint 或 TargetServer 正常运行。
为后端服务器配置单向 TLS
使用 TargetEndpoint 定义时,配置从 Edge(TLS 客户端)到后端服务器(TLS 服务器)的单向 TLS 访问权限不需要在 Edge 上进行任何额外配置。后端服务器负责正确配置 TLS。
您只需确保 TargetEndpoint 定义中的 <URL> 元素通过 HTTPS 协议引用后端服务,并启用 TLS:
<TargetEndpoint name="default">
…
<HTTPTargetConnection>
<SSLInfo>
<Enabled>true</Enabled>
</SSLInfo>
<URL>https://myservice.com</URL>
</HTTPTargetConnection>
…
</TargetEndpoint>如果您使用 TargetServer 定义后端服务,请在 TargetServer 定义中启用 TLS:
<TargetServer name="target1">
<Host>mocktarget.apigee.net</Host>
<Port>443</Port>
<IsEnabled>true</IsEnabled>
<SSLInfo>
<Enabled>true</Enabled>
</SSLInfo>
</TargetServer> 不过,如果您希望 Edge 验证后端证书,则必须创建一个包含后端证书或证书链的信任库。然后,在 TargetEndpoint 定义中指定信任库:
<TargetEndpoint name="default">
…
<HTTPTargetConnection>
<SSLInfo>
<Enabled>true</Enabled>
<TrustStore>ref://myTrustStoreRef</TrustStore>
</SSLInfo>
<URL>https://myservice.com</URL>
</HTTPTargetConnection>
…
</TargetEndpoint>或者在 TargetServer 定义中:
<TargetServer name="target1">
<Host>mockserver.apigee.net</Host>
<Port>443</Port>
<IsEnabled>true</IsEnabled>
<SSLInfo>
<Enabled>true</Enabled>
<TrustStore>ref://myTrustStoreRef</TrustStore>
</SSLInfo>
</TargetServer>如需配置单向 TLS,请执行以下操作:
- 如果您要验证后端证书,请在 Edge 上创建信任库,并上传后端证书或 CA 链,如密钥库和信任库中所述。 在此示例中,如果您必须创建信任库,请将其命名为 myTrustStore。
-
如果您创建了信任库,请使用以下 POST API 调用创建名为 myTrustStoreRef 的引用,指向您在上面创建的信任库:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \ -d '<ResourceReference name="myTrustStoreRef"> <Refers>myTrustKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:password - 使用 Edge 管理界面更新 API 代理的 TargetEndpoint 定义(或者,如果您在 XML 中定义 API 代理,请修改代理的 XML 文件):
- 登录 Edge 管理界面 (https://enterprise.apigee.com)。
- 在 Edge 管理界面菜单中,选择 API。
- 选择要更新的 API 代理的名称。
- 选择开发标签页。
- 在目标端点下,选择默认。
- 在代码区域中,修改
<HTTPTargetConnection>元素以添加<SSLInfo>元素。 请务必指定正确的信任库引用,并将<Enabled>设置为 true:<TargetEndpoint name="default"> … <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> … </TargetEndpoint> - 保存 API 代理。如果 API 代理已部署,保存它会使用新设置重新部署它。
配置与后端服务器的双向 TLS
如果您想在 Edge(TLS 客户端)和后端服务器(TLS 服务器)之间支持双向 TLS,请执行以下操作:
- 在 Edge 上创建密钥库,并上传 Edge 证书和私钥。
- 如果您想验证后端证书,请在 Edge 上创建一个信任库,其中包含您从后端服务器收到的证书和 CA 链。
- 更新引用后端服务器的所有 API 代理的 TargetEndpoint,以配置 TLS 访问权限。
使用密钥别名指定密钥库证书
您可以在同一密钥库中定义多个证书,每个证书都有自己的别名。 默认情况下,Edge 会使用密钥库中定义的第一个证书。
(可选)您可以配置 Edge 以使用 <KeyAlias> 属性指定的证书。
这样一来,您就可以为多个证书定义一个密钥库,然后在 TargetServer 定义中选择要使用的证书。如果 Edge 找不到别名与 <KeyAlias> 匹配的证书,则会使用默认操作,即选择密钥库中的第一个证书。
Edge for Public Cloud 用户必须与 Apigee Edge 支持团队联系,才能启用此功能。
配置双向 TLS
如需配置双向 TLS,请执行以下操作:
- 按照此处所述的步骤在 Edge 上创建密钥库,并上传证书和私钥:密钥库和信任库。 在此示例中,创建一个名为 myTestKeystore 的密钥库,该密钥库使用别名 myKey 作为证书和私钥的名称。
-
使用以下 POST API 调用,为上面创建的密钥库创建名为 myKeyStoreRef 的引用:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \ -d '<ResourceReference name="myKeyStoreRef"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:password此引用指定密钥库的名称,并将引用类型指定为
KeyStore。使用以下 GET API 调用来查看引用:
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/myKeyStoreRef / -u email:password - 如果您想验证后端证书,请在 Edge 上创建信任库,并上传证书和 CA 链,如密钥库和信任库中所述。 在此示例中,如果您必须创建信任库,请将其命名为 myTrustStore。
-
如果您创建了信任库,请使用以下 POST API 调用创建名为 myTrustStoreRef 的引用,指向您在上面创建的信任库:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \ -d '<ResourceReference name="myTrustStoreRef"> <Refers>myTrustKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:password - 使用 Edge 管理界面更新 API 代理的 TargetEndpoint 定义(或者,如果您在 XML 中定义 API 代理,请修改代理的 XML 文件):
- 登录 Edge 管理界面 (https://enterprise.apigee.com)。
- 在 Edge 管理界面菜单中,选择 API。
- 选择要更新的 API 代理的名称。
- 选择开发标签页。
- 在目标端点下,选择默认。
- 在代码区域中,修改
<HTTPTargetConnection>元素以添加<SSLInfo>元素。请务必指定正确的密钥库和密钥别名,并将<Enabled>和<ClientAuthEnabled>元素都设置为 true:<TargetEndpoint name="default"> ... <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeyStoreRef</KeyStore> <KeyAlias>myKey</KeyAlias> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> ... </TargetEndpoint> - 保存 API 代理。如果 API 代理已部署,保存它会使用新设置重新部署它。
如需详细了解 <TargetEndpoint> 中提供的选项,包括如何使用变量来提供 TargetEndpoint <SSLInfo> 值,请参阅 API 代理配置参考文档。
启用 SNI
Edge 支持从消息处理器使用服务器名称指示 (SNI) 来定位 Apigee Edge for Cloud 和 Private Cloud 部署中的目标端点。
对于 Edge for Private Cloud,为了向后兼容现有目标后端,Apigee 默认停用了 SNI。如果您的目标后端配置为支持 SNI,则可以启用此功能。如需了解详情,请参阅将 SNI 与 Edge 搭配使用。