为私有云配置虚拟主机

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

在本地安装中,您可以完全控制虚拟主机。无论是否使用 TLS,您都可以为任何组织的任何组织创建虚拟主机。

本文档介绍如何创建简单的虚拟主机。也就是不支持 TLS 的版本。如需查看更多示例(包括创建支持 TLS 的虚拟主机的示例),请参阅为私有云配置对 API 的 TLS 访问

了解详情

主机别名简介

创建虚拟主机时,您必须指定该虚拟主机的主机别名。 这通常是虚拟主机的 DNS 名称。

在确定处理请求的 API 代理时,边缘路由器会将传入请求的 Host 标头与可用主机别名列表进行比较。通过虚拟主机发出请求时,请指定与虚拟主机的主机别名匹配的域名,或者指定路由器的 IP 地址以及包含主机别名的 Host 标头。

例如,如果您在端口 9001 上创建了一个主机别名为 myapis.apigee.net 的虚拟主机,那么通过该虚拟主机向 API 发出的 c网址 请求可以使用以下某种格式:

  • 如果您有 myapis.apigee.net 的 DNS 条目:

    curl http://myapis.apigee.net:9001/proxy-base-path/resource-path
  • 如果您没有 myapis.apigee.net 的 DNS 条目:

    curl http://routerIP:9001/proxy-base-path/resource-path -H 'host:myapis.apigee.net'

    在这种形式中,指定路由器的 IP 地址,并在 Host 标头中传递主机别名。

    curl http://routerIP:9001/proxy-base-path/resource-path

没有虚拟主机的 DNS 条目时的选项

没有 DNS 条目时,可以将主机别名设置为路由器的 IP 地址和虚拟主机的端口,例如 routerIP:port。例如:

192.168.1.31:9001

当您按以下形式发出 curl 命令时:

curl http://routerIP:9001/proxy-base-path/resource-path

建议使用此选项,因为它适合 Edge 界面。

如果您有多个路由器,请为每个路由器添加主机别名,指定每个路由器的 IP 地址和虚拟主机的端口。

或者,您也可以将主机别名设置为某个值,例如 temp.hostalias.com。然后,您必须在每个请求中传递 Host 标头:

curl -v http://routerIP:9001/proxy-base-path/resource-path -H 'Host: temp.hostalias.com'

或者,在您的 /etc/hosts 文件中添加主机别名。例如,将下面这行代码添加到 /etc/hosts 中:

192.168.1.31 temp.hostalias.com

然后,您可以像拥有 DNS 条目一样发出请求:

curl -v http://myapis.apigee.net:9001/proxy-base-path/resource-path

关于 Private Cloud 4.16.01 及更高版本的 Edge 上的虚拟主机端口

创建虚拟主机时,您需要指定该虚拟主机使用的路由器端口。例如,端口 9001。

对于适用于私有云的 Apigee 4.16.01 及更高版本,默认情况下,路由器以“apigee”用户的身份运行,而后者无权访问特权端口(通常是端口 1024 及更低)。如果要创建一个将路由器绑定到受保护端口的虚拟主机,则必须将路由器配置为以有权访问这些端口的用户身份运行。如需了解详情,请参阅设置虚拟主机

创建虚拟主机

本部分介绍如何为适用于私有云的 Apigee Edge 创建虚拟主机。请注意,如需创建新的虚拟主机,您必须是组织管理员。

您可以使用 API 或 Edge 界面为适用于私有云的 Apigee Edge 创建虚拟主机。以下各部分将为您介绍相关内容。

使用浏览器创建虚拟主机

本部分介绍如何使用浏览器创建虚拟主机(仅限 Edge 界面)。

如需在 Edge 界面中创建新的虚拟主机,请执行以下操作

  1. 登录 Edge 管理界面。
  2. 依次选择管理 > 虚拟主机
  3. 从下拉列表中选择环境。

    Edge 会显示该环境的虚拟主机列表。

  4. 如需创建新的虚拟主机,请选择 + Virtual Host

    Edge 会显示创建虚拟主机表单。

    您也可以点击现有虚拟主机的名称进行修改。

  5. 定义新的虚拟主机。请注意,基准网址字段必须包含协议(即,为字段的值添加“http://”或“https://”前缀)。

    另外请注意:

    • 您可以创建任意数量的虚拟主机
    • TLS 是可选的,可以是版本 1.0、1.1 或 1.2
    • 虚拟主机的端口可配置
  6. 点击 Create 按钮以保存新的虚拟主机。

使用 API 创建虚拟主机

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

<VirtualHost name="myVHost">
   <HostAliases>
     <HostAlias>DNS_name_or_IP:port</HostAlias>
   </HostAliases>
   <Interfaces/>
   <Port>9005</Port>
</VirtualHost>

请注意,虚拟主机包含 name 属性。您可以使用 name 属性的值将 API 代理配置为使用虚拟主机。

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

http://routerIP:port/proxy-base-path/resource-path
https://routerIP:port/proxy-base-path/resource-path

其中:

  • httphttps:如果虚拟主机已配置为支持 TLS,则使用 HTTPS。如果虚拟主机不支持 TLS,请使用 HTTP。
  • routerIP:port 是虚拟主机的 IP 地址和端口号。
  • proxy-base-pathresource-path 是在创建 API 代理时定义的。

通常,您不能向具有 IP 地址和端口号的客户发布 API。而应为路由器和端口定义 DNS 条目。例如:

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

如果您定义 DNS 条目,则必须为虚拟主机创建与该 DNS 条目的域名相匹配的主机别名。主机别名必须与客户端在 Host 标头中传递的字符串匹配。在上面的示例中,您要指定主机别名 api.myCompany.com

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

如需创建使用 HTTP 协议的虚拟主机,请执行以下操作:

  1. 使用 Create a Virtual Host API 创建虚拟主机,其中 ms-IP 是管理服务器节点的 IP 地址或域名:
    $ curl -X POST -H "Content-Type:application/xml" \
    http://ms-IP:8080/v1/o/org_name/environments/env_name/virtualhosts \
    -d '<VirtualHost name="newVHost">
        <HostAliases>
          <HostAlias>api.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9005</Port>
      </VirtualHost>' \
    -u sysAdminEmail:password
    
  2. 为虚拟主机创建与主机别名匹配的 DNS 记录。
  3. 如果您有任何现有的 API 代理,请将虚拟主机添加到代理端点的 <HTTPConnection> 元素中。系统会自动将虚拟主机添加到所有新的 API 代理。 请参阅 配置 API 代理以使用虚拟主机

修改虚拟主机

如需修改虚拟主机,请执行以下操作:

  1. 使用 Update a Virtual Host API 更新虚拟主机,其中 <ms-IP> 是管理服务器节点的 IP 地址或域名。您必须在请求正文中指定虚拟主机的完整定义,而不仅仅是要更改的元素。在以下示例中,您将虚拟主机的端口号从 9008 更改为 9009:

    curl -X PUT -H "Content-Type:application/xml" \
      http://ms-IP:8080/v1/o/org_name/environments/env_name/virtualhosts/vhost_name \
      -d '<VirtualHost name="newVHost">
        <HostAliases>
          <HostAlias>api.myCompany.com</HostAlias>
        </HostAliases>
        <Interfaces/>
        <Port>9009</Port>
      </VirtualHost>' \
      -u email:password
  2. 对于适用于 Private Cloud 的 Edge 4.16.01 和 4.16.05 版,如果您修改现有虚拟主机,并在不更改端口号的情况下启用 TLS 或停用 TLS,则:
    1. 停止路由器:

      /opt/apigee/apigee-service/bin/apigee-service edge-router stop
    2. 删除 /opt/nginx/conf.d 中的任何文件:

      rm -f /opt/nginx/conf.d/*
    3. 启动路由器:

      /opt/apigee/apigee-service/bin/apigee-service edge-router start
    4. 对所有路由器重复上述操作。