关于虚拟主机

您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
info

在 Edge 中,路由器负责处理所有传入的 API 流量。 这意味着,所有对 API 代理的 HTTP 和 HTTPS 请求都先由 Edge 路由器处理。

借助虚拟主机,您可以在服务器上托管多个域名。 对于 Edge,服务器对应于 Edge 路由器。通过在路由器上定义多个虚拟主机, 路由器可以处理针对多个域名发出的 API 请求。

Edge 上的虚拟主机定义了访问协议(HTTP 或 HTTPS)、开放的路由器端口和主机 别名。主机别名通常是映射到路由器 IP 地址的 DNS 域名。

例如,下图显示了一个包含两个虚拟主机定义的路由器:

第一个虚拟主机处理网域 domainName1 上的 HTTPS 请求,第二个虚拟主机处理 domainName2 上的 HTTP 请求。

在向 API 代理发出请求时,路由器会将传入请求的 Host 标头与所有虚拟主机定义的主机别名列表进行比较,以确定哪个虚拟 主机处理请求。

虚拟主机定义简介

虚拟主机包含以下信息:

  • 虚拟主机的内部名称 。您可以使用该名称在 API 代理中引用虚拟 主机,并在配置虚拟主机时使用该名称。
  • 虚拟主机的主机别名 。主机别名通常是映射到路由器 IP 地址的 DNS 域名。API 代理请求的 Host 标头必须包含虚拟主机的主机别名。
  • 路由器上的开放端口
  • 是否启用 TLS(HTTPS 访问)或未启用 TLS(HTTP 访问)。

例如,您可以在创建虚拟主机时指定以下信息:

  • name = myvhost
  • host alias = apis.acme.com
  • port = 443
  • 已启用 TLS

根据上述虚拟主机的设置,对 API 代理的请求采用以下形式:

https://apis.acme.com/{proxy-base-path}/{resource-path}

其中:

  • {proxy-base-path} 是在创建 API 代理时定义的,并且对于每个 API 代理都是唯一的。 例如:
    https://apis.acme.com/characters
  • {resource-path} 是可通过 API 代理访问的资源的路径。例如:
    https://apis.acme.com/characters/coyote
    https://apis.acme.com/characters/roadrunner

Edge for Cloud 中的虚拟主机简介

每个 Edge 组织都会自动包含两个环境(testprod)、每个环境中的两个虚拟主机(defaultsecure), 以及每个主机别名的 DNS 记录。

每个 Apigee 提供的虚拟主机的主机别名都包含 组织环境 的名称,如下表所示:

环境 虚拟主机名 主机别名 端口 已启用 TLS
prod 默认 {org-name}-prod.apigee.net 80
安全 {org-name}-prod.apigee.net 443
测试 默认 {org-name}-test.apigee.net 80
安全 {org-name}-test.apigee.net 443

例如,在 prod 环境中,名为“myorg”的组织的默认域名为“myorg-prod.apigee.net”。因此,如需访问该组织中的 API 代理,您可以使用以下形式的网址:

http://myorg-prod.apigee.net/{proxy-base-path}/{resource-path}
https://myorg-prod.apigee.net/{proxy-base-path}/{resource-path}

Apigee 付费方案 :包含“apigee.net”的域名可能不是您想要向客户公开的域名。您可以使用 DNS 条目和 CNAME 记录将域名映射到 Edge 上的组织。您还必须创建一个虚拟主机,并将主机别名设置为该 域名。这样,开发者就可以通过特定于您公司的域名访问您的 API。

以下是 Edge 中自定义网域的示例:

https://apis.acme.com/{proxy-base-path}/{resource-path}

Edge for Private Cloud 中的虚拟主机简介

安装 Apigee Edge for Private Cloud 后,系统不会为您创建默认组织、 环境或虚拟主机。完成 Edge 安装过程后, 您的第一个操作通常是通过 “新手入门”流程创建组织、环境和虚拟主机。

如需执行新手入门,请在 Edge 管理服务器节点上运行以下命令:

/opt/apigee/apigee-service/bin/apigee-service apigee-provision setup-org -f configFile

其中 configFile 包含创建 用户、组织、环境和虚拟主机所需的信息。

例如,您可以创建:

  • 您选择的用户,以充当组织管理员
  • 名为 example 的组织
  • 组织中名为 prod 的环境
  • 环境中名为 default 的虚拟主机,该虚拟主机允许通过端口 9001 进行 HTTP 访问
  • 用于访问路由器的 DNS 名称的主机别名,或路由器 IP 地址和 虚拟主机端口(格式为 IP:9001)。

您稍后可以向本地版 Edge 添加任意数量的组织、环境和虚拟主机。 如需了解详情,请参阅:

虚拟主机在 Edge 路由器上打开。因此,您必须确保为虚拟主机指定的端口 在路由器上处于打开状态。您可以使用以下形式的命令打开端口:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT --verbose

运行该命令后,您可以使用以下形式的网址访问 API:

http://<router-ip>:9001/{proxy-base-path}/{resource-path}

通常,您不会使用 IP 地址和 端口号向客户发布 API。而是为路由器和端口定义 DNS 条目。例如:

http://myAPI.myCo.com/{proxy-base-path}/{resource-path}

定义 DNS 条目时,您还必须创建一个虚拟主机,其主机别名与 DNS 条目的域名 匹配。在上面的示例中,您可以在创建虚拟主机时指定主机别名 myAPI.myCo.com。

主机别名和 DNS 名称简介

您为虚拟主机设置的一个属性是主机别名。 主机别名通常是虚拟主机的 DNS 名称。设置主机别名的方式取决于您的 Edge 安装类型:Cloud 或 Private Cloud。

Edge for Cloud 中的主机别名和 DNS 名称

在 Edge for Cloud 中,首次创建 Edge 组织时,Apigee 会自动 创建两个环境(testprod)、每个环境中的 两个虚拟主机(defaultsecure),以及每个 虚拟主机的 DNS 记录。

虚拟主机的主机别名包含组织和环境的名称。 因此,通过虚拟主机发出的请求采用以下形式:

  • http://{org-name}-prod.apigee.net/{proxy-base-path}/{resource-path}
  • https://{org-name}-prod.apigee.net/{proxy-base-path}/{resource-path}
  • http://{org-name}-test.apigee.net/{proxy-base-path}/{resource-path}
  • https://{org-name}-test.apigee.net/{proxy-base-path}/{resource-path}

通常,您希望创建使用您的域名的虚拟主机,而不是使用 默认 apigee.net 域名。为此,您必须先创建自己的 DNS 条目和 CNAME 记录。

下图显示了 Edge 处理 API 请求的典型配置:

在此示例中:

  • api.acme.com 是您所需的域名。
  • 您定义 DNS 条目和 CNAME 记录,以将 api.acme.com 指向 acme-prod.apigee.net
  • 请求包含 Host 标头,路由器使用该标头确定处理请求的虚拟主机。

在此示例中,您可以在虚拟主机定义中指定以下信息:

  • name = myvhost
  • host alias = apis.acme.com
  • port = 443
  • 启用 TLS 访问

如需了解详情,请参阅为 Cloud 配置虚拟主机

Edge for Private Cloud 中的主机别名 和 DNS 名称

与 Edge for Cloud 一样,您可以创建使用自己的域名作为主机 别名的虚拟主机。然后,您可以创建自己的 DNS 条目和 CNAME 记录来访问这些虚拟主机。

Cloud 和 Private Cloud 之间的区别之一是,在 Cloud 中,Apigee 会自动为您的组织创建 DNS 名称,格式如下:

  • name=default: http://{org-name}-{env-name}.apigee.net (路由器端口 80)
  • name=secure: https://{org-name}-{env-name}.apigee.net (路由器端口 443)

在 Edge for Private Cloud 中,您必须为路由器的 IP 地址和端口 创建 DNS 条目。

例如,您可以在虚拟主机定义中指定以下信息:

  • name = myvhost
  • host alias = apis.acme.com
  • port = 9001
  • 启用 TLS 访问

下图显示了 Edge 处理 API 请求的典型配置:

在此示例中:

  • api.acme.com 是您所需的域名。
  • 您定义 DNS 条目和 CNAME 记录,以将 api.acme.com 指向路由器的 IP 地址和端口。
  • 请求包含 Host 标头,路由器使用该标头确定处理请求的虚拟主机。

如需了解详情,请参阅为 Private Cloud 配置虚拟主机

主机别名和通配符

您可以在主机别名中添加“*”通配符。“*”通配符只能位于主机别名的开头(第一个“.”之前),并且不能与其他字符混用。

以下是使用通配符的有效主机别名的示例:

*.example.com

以下示例无效:

  www.*.example.com
  w*.example.com

在虚拟主机别名中使用通配符可让 API 代理处理针对多个子网域(例如 alpha.example.combeta.example.comlive.example.com)的调用。使用通配符别名还有助于您减少每个环境使用的虚拟 主机数量,以符合产品 限制,因为带有通配符的虚拟主机仅计为一个虚拟主机。

虚拟主机的 TLS 证书必须在证书的 CN 名称中包含匹配的通配符。 例如,*.example.com

虚拟主机属性简介

在 Edge 中,虚拟主机由 XML 对象表示。例如,以下 XML 对象定义了一个虚拟主机:

<VirtualHost name="vhostName">
    <HostAliases>
        <HostAlias>hostAlias</HostAlias>
    </HostAliases>
    <Interfaces>
        <!-- Private Cloud only -->
        <Interface>interfaceName</Interface>
    <Port>portNumber</Port>
    <BaseURL>http://myCo.com<</BaseUrl>
    <OCSPStapling>off</OCSPStapling>
    <RetryOptions/>
   <SSLInfo>
        <Enabled>trueFalse</Enabled>
        <ClientAuthEnabled>trueFalse</ClientAuthEnabled>
        <KeyStore>ref://keystoreRef</KeyStore>
        <KeyAlias>keyAlias</KeyAlias>
        <TrustStore>ref://truststoreRef</TrustStore>
        <IgnoreValidationErrors>trueFalse</IgnoreValidationErrors>
    </SSLInfo>
    <Properties>
        <Property name="proxy_read_timeout">timeout</Property>
        <Property name="keepalive_timeout">timeout</Property>
        <Property name="proxy_request_buffering">onOff</Property>
        <Property name="proxy_buffering">onOff</Property>
        <Property name="ssl_protocols">protocolList</Property>
        <Property name="ssl_ciphers">cipherList</Property>
    </Properties>
</VirtualHost>

您可以设置的属性列表取决于您使用的是 Edge for Cloud 还是 Edge for Private Cloud。如果您使用的是 Edge for Private Cloud,则可用属性列表还取决于您的 Edge 版本。如需详细了解虚拟主机的所有属性,请参阅 虚拟主机属性参考

如需详细了解如何为特定版本的 Edge 创建虚拟主机,请参阅: