配置虚拟主机

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
信息

拥有付费账号的 Cloud 客户和所有 Edge for Private Cloud 客户都可以在组织中创建虚拟主机。创建虚拟主机的用户必须具有组织管理员角色,或者具有修改虚拟主机权限的自定义角色。其他角色的用户无权创建虚拟主机。

观看有关虚拟主机的视频简介。

创建虚拟主机

请按照以下基本步骤创建虚拟主机。 您要使用的实际步骤取决于您是 Cloud 还是专用 Cloud 客户,以及您是否要启用 TLS:

  1. 为面向公众的网域创建 DNS 条目和 CNAME 记录。
  2. 如果在虚拟主机上启用 TLS:
    1. 使用此处介绍的步骤创建和配置密钥库:密钥库和信任库
    2. 将证书和密钥上传到密钥库。确保证书指定的域名与您要为虚拟主机使用的主机别名一致。
    3. 使用 Edge 界面或 API 创建对密钥库的引用。此引用将密钥库的名称和引用类型指定为 KeyStore。如需详细了解如何创建和修改引用,请参阅使用引用
    4. 如果您要执行双向 TLS,请创建信任库、上传证书,然后创建对信任库的引用。请按照密钥库和信任库中所述的步骤创建信任库。
  3. 使用创建虚拟主机 API 创建虚拟主机。如果启用 TLS,请务必指定正确的密钥库引用、信任库引用和密钥别名。
  4. 如果您有任何现有 API 代理,请将虚拟主机添加到 ProxyEndpoint。 虚拟主机会自动添加到所有新的 API 代理。请参阅配置 API 代理以使用虚拟主机

将 API 代理更新为使用虚拟主机,并为主机别名创建 DNS 条目和 CNAME 记录后,您可以按如下所示访问 API 代理:

https://api.myCompany.com/v1/project-base-path/resource-path

例如:

https://api.myCompany.com/v1/weather/forecastrss?w=12797282

使用 API 或界面创建虚拟主机

您可以使用 Edge API 或 Edge 界面创建虚拟主机。

以下大多数示例都使用 Edge API。如需访问界面以在 Edge 界面中创建、修改和删除虚拟主机,请执行以下操作:

  1. 登录 apigee.com/edge

    Edge for Private Cloud 客户使用 http://ms-ip:9000(本地),其中 ms-ip 是管理服务器节点的 IP 地址或 DNS 名称。

  2. 在左侧导航栏中,依次选择管理 > 虚拟主机
  3. 选择环境,例如 prodtest
    系统会显示为环境定义的虚拟主机。
  4. 选择 + 虚拟主机以创建虚拟主机,或选择现有虚拟主机的名称以对其进行修改。

为 HTTP 创建虚拟主机

Edge for Private Cloud 客户可以使用 HTTP 创建虚拟主机。

如需创建不支持 TLS 的虚拟主机,请创建用于定义虚拟主机的 XML 对象。例如,以下 XML 对象定义了一个使用 HTTP 协议的虚拟主机:

<VirtualHost name="myVHost">
   <HostAliases>
     <HostAlias>api.myCompany.com</HostAlias>
   </HostAliases>
   <Interfaces/>
   <Port>80</Port>
</VirtualHost>

在此定义中,您将:

  • 名称指定为 myVHost。您可以在 API 代理或 API 调用中使用该名称来引用虚拟主机。
  • 主机别名指定为 api.myCompany.com。这是用于访问您的 API 的公共域名,如 DNS 定义和 CNAME 记录中所定义。
  • 端口号指定为 80。如果省略,则默认将端口设置为 443。
  • 您还可以在虚拟主机中设置其他属性。 如需查看所有属性的参考文档,请参阅虚拟主机属性参考文档

如果您有任何现有 API 代理,请将虚拟主机添加到代理端点中的 <HTTPConnection> 元素。虚拟主机会自动添加到所有新的 API 代理。 请参阅配置 API 代理以使用虚拟主机。 如果您创建的新的 API 代理不应通过特定虚拟主机访问,则必须修改该 API 代理,以便从其 ProxyEndpoint 中移除该虚拟主机。

然后,您可以通过向以下网址发出请求,通过此虚拟主机访问 API 代理:

http://api.myCompany.com/proxy-base-path/resource-path
https://api.myCompany.com/proxy-base-path/resource-path

使用创建虚拟主机 API 创建虚拟主机:

curl -X POST -H "Content-Type:application/xml" \
  http://ms-IP:8080/v1/o/org_name/environments/env_name/virtualhosts \
  -d '<VirtualHost name="myVHost">
        <HostAliases>
            <HostAlias>api.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>80</Port>
    </VirtualHost>' \
  -u sysAdminEmail:password
发出请求

为单向 TLS 创建虚拟主机

以下 XML 对象定义了单向 TLS 的虚拟主机:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>api.myCompany.com</HostAlias>
    </HostAliases>
    <Port>443</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>
</VirtualHost>

在此定义中,您可以通过将 <Enable> 元素设为 true 来启用 TLS,并使用 <KeyStore><KeyAliase> 元素指定 TLS 连接使用的密钥库和密钥别名。

如需详细了解如何使用 TLS,请参阅 TLS/SSL

确定如何在虚拟主机中指定密钥库和信任库名称

配置虚拟主机以支持 TLS 时,您可以使用引用指定密钥库。引用是一个包含密钥库或信任库名称的变量,而不是直接指定密钥库或信任库名称,如下所示:

    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
    </SSLInfo>

使用引用的优势在于,您可以更改引用的值以更改虚拟主机使用的密钥库,更改的原因通常是因为当前密钥库中的证书即将过期。更改引用值不需要重启边缘路由器。如需详细了解如何创建和修改引用,请参阅使用引用

您只能使用密钥库和信任库的引用;而不能使用别名的引用。更改密钥库的引用时,确保证书的别名与旧密钥库中的别名相同。

使用密钥库和信任库的引用时的限制

使用密钥库和信任库的引用时,您必须考虑以下限制:

  • 仅当您支持 SNI 且在 Apigee 路由器上终止 SSL 时,才能在虚拟主机中使用密钥库和信任库引用。
  • 如果您在 Apigee 路由器前面具有负载平衡器,并且您在负载平衡器上终止 TLS,则无法在虚拟主机中使用密钥库和信任库引用。

为双向 TLS 创建虚拟主机

如需启用双向 TLS,请将 <ClientAuthEnabled> 元素设置为 true,并使用带有 <TrustStore> 元素的引用来指定信任库。信任库包含客户端的证书颁发者和证书的 CA 链,这是必需的。客户端也必须正确配置为双向 TLS。

如需为双向 TLS 创建虚拟主机,请创建用于定义虚拟主机的 XML 对象:

<VirtualHost name="myTLSVHost">
    <HostAliases>
        <HostAlias>api.myCompany.com</HostAlias>
    </HostAliases>
    <Port>443</Port>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <KeyStore>ref://myTestKeystoreRef</KeyStore>
        <KeyAlias>myKeyAlias</KeyAlias>
        <TrustStore>ref://myTestTruststoreRef</TrustStore>
    </SSLInfo>
</VirtualHost>

在此定义中,您将:

  • <ClientAuthEnabled> 设置为 true 以启用双向 TLS。
  • 使用 <TrustStore> 元素指定对信任库的引用。信任库包含客户端的证书颁发者和证书的 CA 链,这是必需的。

如需详细了解如何使用 TLS,请参阅 TLS/SSL

修改虚拟主机

拥有付费账号的 Cloud 客户和所有适用于私有云的 Edge 客户都可以使用 更新虚拟主机 API 来更新虚拟主机。借助此 API,您可以为虚拟主机属性参考文档中所述的虚拟主机设置所有属性。

使用 更新虚拟主机 API 更新虚拟主机。使用该 API 时,您必须在请求正文中指定虚拟主机的完整定义,而不仅仅是您要更改的元素。

在此示例中,您将 proxy_read_timeout 属性的值设置为:

curl -X PUT -H "Content-Type:application/xml" \
    https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/virtualhosts/vhost_name \
    -d '<VirtualHost  name="myTLSVHost">
         <HostAliases>
           <HostAlias>api.myCompany.com</HostAlias>
         </HostAliases>
         <Port>443</Port>
         <SSLInfo>
           <Enabled>true</Enabled>
           <ClientAuthEnabled>false</ClientAuthEnabled>
           <KeyStore>ref://myTestKeystoreRef</KeyStore>
           <KeyAlias>myKeyAlias</KeyAlias>
         </SSLInfo>
         <Properties>
           <Property name="proxy_read_timeout">50</Property>
         </Properties>
     </VirtualHost>' \
    -u orgAdminEmail:password

删除虚拟主机

如需从环境中删除虚拟主机,您必须先更新引用该虚拟主机的所有 API 代理,以移除引用。请参阅配置 API 代理以使用虚拟主机

使用 删除虚拟主机 API 删除虚拟主机:

curl -X DELETE \
  https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/virtualhosts/vhost_name \
  -u orgAdminEmail:password

查看虚拟主机的相关信息

查看环境中定义的虚拟主机的相关信息,如下所述。

Edge

如需使用 Edge 界面查看虚拟主机的相关信息,请执行以下操作:

  1. 登录 apigee.com/edge

    Edge for Private Cloud 客户使用 http://ms-ip:9000(本地),其中 ms-ip 是管理服务器节点的 IP 地址或 DNS 名称。

  2. 在左侧导航栏中,依次选择管理 > 虚拟主机
  3. 选择环境,例如 prodtest

    系统会显示为环境定义的虚拟主机。如果虚拟主机配置为使用密钥库或信任库,请点击显示以查看更多信息。

如果虚拟主机配置为使用 TLS/SSL,虚拟主机名称旁边会显示一个锁形图标。这意味着,TLS/SSL 证书、密钥和证书链已上传到 Edge 并与虚拟主机相关联。如需查看可用证书的相关信息,请执行以下操作:

  1. 在左侧导航栏中,依次选择管理 > 环境 > TLS 密钥库
  2. 选择环境(通常是 prodtest)。
  3. 展开密钥库以查看证书。

传统边缘(私有云)

如需使用 Classic Edge 界面查看虚拟主机的相关信息,请执行以下操作:

  1. 登录 http://ms-ip:9000,其中 ms-ip 是管理服务器节点的 IP 地址或 DNS 名称。
  2. 在左侧导航栏中,依次选择管理 > 虚拟主机
  3. 选择环境,例如 prodtest
  4. 点击 Virtual Hosts(虚拟主机)标签页。

    系统会显示为环境定义的虚拟主机。如果虚拟主机配置为使用密钥库或信任库,请点击显示以查看更多信息。

    “虚拟主机”标签页会显示名称、端口、别名等相关信息。

如果虚拟主机配置为使用 TLS/SSL,虚拟主机名称旁边会显示一个锁形图标。这意味着,TLS/SSL 证书、密钥和证书链已上传到 Edge 并与虚拟主机相关联。如需查看可用证书的相关信息,请执行以下操作:

  1. 在顶部导航栏中,依次选择管理 > TLS 证书
  2. 选择环境(通常是 prodtest)。
  3. 展开密钥库以查看证书。

使用 Edge API 查看虚拟主机

您还可以使用 Edge API 查看虚拟主机的相关信息。例如,List Virtual Hosts API 会返回所有虚拟主机的列表:

curl -X GET -H "accept:application/xml" \
    https://api.enterprise.apigee.com/v1/o/org_name/environments/env_name/virtualhosts \
    -u orgAdminEmail:pWord

其中,orgAdminEmail:pWord 是组织管理员的用户名和密码,org_name/env_name 指定包含虚拟主机的组织和环境。示例响应:

[
 "default",
 "secure"
]

如需查看特定虚拟主机的相关信息,请使用 Get Virtual Host API:

curl -X GET -H "accept:application/xml" \
    https://api.enterprise.apigee.com/v1/o/org_name/environments/env_name/virtualhosts/vhost_name \
    -u orgAdminEmail:pWord

其中 vhost_name 是虚拟主机的名称。例如,您可以将 vhost_name 指定为“安全”,以查看 Apigee 创建的默认安全虚拟主机的配置:

<VirtualHost name="secure">
    <HostAliases>
        <HostAlias>api.myCompany.com</HostAlias>
    </HostAliases>
    <Port>443</Port>
    <Properties/>
    <Interfaces/>
    <RetryOptions/>
    <SSLInfo>
        <ClientAuthEnabled>false</ClientAuthEnabled>
        <Enabled>true</Enabled>
        <KeyAlias>freetrial</KeyAlias>
        <KeyStore>ref://freetrial</KeyStore>
        <IgnoreValidationErrors>false</IgnoreValidationErrors>
    </SSLInfo>
</VirtualHost>

将 API 代理配置为使用虚拟主机

当您创建新的 API 代理时,Edge 会自动将其配置为使用组织中的所有可用虚拟主机。通过虚拟主机向 API 代理发出的请求使用以下形式:

https://host-alias/proxy-base-path/resource-path

其中:

  • host-alias 通常是虚拟主机的 DNS 名称。
  • proxy-base-path 是在创建 API 代理时定义的,并且每个 API 代理都有唯一的 proxy-base-path
  • resource-path 可通过 API 代理访问的资源的路径。

控制 API 代理使用的虚拟主机

在 API 代理的 XML 配置中,您可以使用 virtualhost 标记指定与 API 代理关联的虚拟主机的名称

<HTTPProxyConnection>
  <BasePath>/v1/my/proxy/basepath</BasePath>
  <VirtualHost>secure</VirtualHost>
  <VirtualHost>default</VirtualHost>
</HTTPProxyConnection>

例如,<VirtualHost>secure</VirtualHost> 表示客户端可以使用“安全”虚拟主机的主机别名调用 API 代理。

通常,您在以下情况下修改与 API 代理关联的虚拟主机:

  • 您创建了新的虚拟主机,并且有现有的 API 代理。您必须修改所有现有 API 代理,才能添加新的虚拟主机。
  • 您创建了一个新的 API 代理,该代理不应通过特定虚拟主机访问。 您必须修改 API 代理,才能从其定义中移除该虚拟主机。

如需修改与 API 代理关联的虚拟主机,请执行以下操作:

  1. 访问 API 代理编辑器,如下所述。

    Edge

    如需使用 Edge 界面访问 API 代理编辑器,请执行以下操作:

    1. 登录 apigee.com/edge

      Edge for Private Cloud 客户使用 http://ms-ip:9000(本地),其中 ms-ip 是管理服务器节点的 IP 地址或 DNS 名称。

    2. 在左侧导航栏中,依次选择开发 > API 代理
    3. 在列表中选择要修改的 API 代理。

    传统边缘(私有云)

    如需使用 Classic Edge 界面访问 API 代理编辑器,请执行以下操作:

    1. 登录 http://ms-ip:9000,其中 ms-ip 是管理服务器节点的 IP 地址或 DNS 名称。
    2. 在顶部导航栏中依次选择 API > API 代理
    3. 在列表中选择要修改的 API 代理。
  2. 点击开发标签页。
  3. 代理端点下,选择默认
  4. 在代码区域中:
    1. 移除 API 代理不支持的虚拟主机的所有 <VirtualHost> 元素。
    2. 添加一个新的 <VirtualHost> 元素,并为其指定新虚拟主机的名称。例如,如果新虚拟主机名为 MyVirtualHost,请添加以下标记:
      <HTTPProxyConnection>
        <BasePath>/v1/my/proxy/basepath</BasePath>
        <VirtualHost>default</VirtualHost>
        <VirtualHost>secure</VirtualHost>
        <VirtualHost>MyVirtualHost</VirtualHost>
      </HTTPProxyConnection>
  5. 保存 API 代理。如果 API 代理已部署,保存 API 代理会使用新设置重新部署该代理。

为 API 代理设置 Edge 界面显示的基准网址

Edge 界面会根据与代理部署位置对应的虚拟主机中的设置显示 API 代理的网址。此显示屏可以包含虚拟主机的路由器端口号。

在大多数情况下,Edge 界面中显示的网址是向代理发出外部请求的正确网址。不过,对于某些配置,显示的网址不正确。例如,以下任一配置都可能会导致显示的网址与用于向代理发出外部请求的实际网址不一致:

  • SSL 终止在负载平衡器处发生
  • 负载平衡器和 Apigee 路由器之间会发生端口映射
  • 配置了路径重写的负载平衡器

Edge 支持虚拟主机上名为 <BaseUrl> 的属性,可让您替换 Edge 界面显示的网址。以下示例展示了具有 <BaseUrl> 属性的虚拟主机对象。 在此示例中,“http://myCo.com”值会显示在 Edge 界面中:

<VirtualHost name="myTLSVHost">
  <HostAliases>
    <HostAlias>api.myCompany.com</HostAlias>
  </HostAliases>
  <BaseUrl>http://myCo.com</BaseUrl>
  <Port>443</Port>
  <SSLInfo>
    <Enabled>true</Enabled>
    <ClientAuthEnabled>false</ClientAuthEnabled>
    <KeyStore>ref://myTestKeystoreRef</KeyStore>
    <KeyAlias>myKeyAlias</KeyAlias>
  </SSLInfo>
</VirtualHost>

请注意,<BaseUrl> 的值必须包含协议(即“http://”或“https://”)。

如果未设置 <BaseUrl>,则 Edge 界面呈现的默认网址将显示为“api.myCompany.com”,而实际的主机别名为“http://myCo.com”。