您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
您可以将门户配置为使用 TLS。门户的 TLS 配置过程取决于门户的部署方式:
- 云端:从 Pantheon 或 Acquia(门户的基于云的托管服务)配置 TLS。
- Apigee Edge for Private Cloud:在托管门户的服务器上配置本地 TLS。
TLS 和门户
下图显示了门户使用 TLS 的两个位置:

- 用于在门户和 Edge Management API 之间进行通信。
门户网站不作为独立系统运行。相反,门户网站使用的大部分信息实际上都存储在 Edge 上,而 Edge 可以部署在云端或本地作为私有云安装。必要时,门户会向 Edge 管理 API 发出 HTTP 或 HTTPS 请求,以检索信息或发送信息。
创建门户时,您必须执行的首要步骤之一是指定 Edge 管理 API 的网址。根据 Edge 管理 API 的配置方式,该网址可以使用 TLS。如需了解详情,请参阅创建开发者门户。 - 用于开发者与门户之间的通信。
当您使用开发者服务门户部署 API 时,开发者会登录该门户来注册应用并接收 API 密钥。登录凭据和 API 密钥是专有信息,您需要通过 HTTPS 发送这些信息,以确保其安全性。此类专有信息应通过 HTTPS 发送。
在此场景中配置 TLS 的方式取决于您部署门户的方式:云或 Apigee Edge for Private Cloud。以下部分将分别介绍这两种情形。
在门户和 Edge 管理 API 之间配置 TLS
Edge 管理 API 的配置决定了通信是否可以使用 TLS。如果 Edge 管理 API 配置为使用 TLS,则门户可以使用 HTTPS。 否则,门户会通过 HTTP 与 Edge 通信。因此,作为门户开发者,您只需了解 Edge 的配置方式,即可设置门户与 Edge 之间的连接。
如需了解用于配置与 Edge 管理 API 的连接的程序,请参阅创建开发者门户。
基于云端的 Edge 版本
如果您的门户网站连接到基于云的 Edge 版本,则 Edge 管理 API 的网址已由 Apigee 预配置为使用 TLS。配置门户时,您可以使用网址 https://api.enterprise.apigee.com/v1 访问 Edge Management API。
Edge 的私有云安装
对于 Edge 私有云安装,Edge 管理 API 的网址采用以下形式:
http://EdgePrivateCloudIp:8080/v1
或:
https://EdgePrivateCloudIp:TLSport/v1
其中,EdgePrivateCloudIp 是 Edge 管理服务器的 IP 地址,TLSport 是 Edge 管理 API 的 TLS 端口。 例如,端口号可以是 8443,也可以是 8080,具体取决于 Edge 配置。
在开发者与门户之间配置 TLS
您在开发者与门户之间配置 TLS 的方式取决于您部署门户的方式:云或 Apigee Edge for Private Cloud。
基于云端的门户
Pantheon
Pantheon 通过 Pantheon Global CDN 并使用 Let's Encrypt 为其平台上的所有网站提供免费的自动 HTTPS。另请参阅 Pantheon 全球 CDN 上的 HTTPS。
Acquia
如需使用 Acquia 启用 TLS/SSL,请参阅启用 SSL。Edge Private Cloud 门户
所有 Apigee 建议的专用云门户安装都需要将门户置于负载平衡器后面,如下所示:

因此,对于本地安装,您可以通过以下两种方式配置 TLS:
- 在负载平衡器上配置 TLS:在负载平衡器本身上配置 TLS,而不是在门户上配置。因此,您用于配置 TLS 的过程取决于负载平衡器。如需了解详情,请参阅负载平衡器的文档。
- 在门户本身上配置 TLS:如有必要,您可以在托管门户的 Web 服务器上配置 TLS。如需了解详情,请参阅将门户配置为使用 HTTPS。
您必须先获取自己的 TLS 证书,然后才能将门户部署到生产环境。
配置其他 TLS 设置
您可以修改 sites/default/settings.local.php (Cloud) 或 sites/default/settings.php(私有云)文件,以对门户的 TLS 进行配置更改。
修改文件时,添加 ini_set() 函数的实例以设置属性。 如需详细了解此函数,请参阅:http://php.net/manual/en/function.ini-set.php。
您可以在 sites/default/settings.local.php(云)或 sites/default/settings.php(私有云)文件中设置以下属性:
- cookie_httponly:(推荐) 指定 Cookie 只能通过 HTTP 协议访问。将此属性设置为:
ini_set('session.cookie_httponly', true); - session.cookie_secure
-(可选)指定 Cookie 只能通过安全连接发送。不过,这意味着所有内容都必须通过 HTTPS 传送。如果启用此设置,网站将无法通过 HTTP 协议运行。将此属性设置为:
ini_set('session.cookie_secure', true); - gc_maxlifetime 和 cookie_lifetime:
(可选)gc_lifeteime 指定数据可能被清理的时间(以秒为单位),而 cookie_lifetime 指定 Cookie 的生命周期(以秒为单位)。将这些属性设置为:
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.cookie_lifetime', 3600);
如需详细了解如何在开发者门户和客户端之间设置 TLS,请参阅 Pantheon 文档网站上的 启用 SSL 以实现安全的 HTTPS 通信。
通过负载平衡器配置 TLS
为了获得更好的性能,有时会将负载平衡器配置为执行 TLS 终结。通过 TLS 终结,负载平衡器会解密通过 https:// 发送的消息,并通过 http:// 将消息转发到后端服务器。这样可以节省后端服务器自行解密 https:// 消息的开销。
如果负载平衡器将未加密的 HTTP 消息转发到同一数据中心内的服务器,则不会出现安全问题。不过,如果负载平衡器通过 http:// 将消息转发到数据中心外部的服务器(例如您的 Apigee 开发者门户),则消息不会加密,从而造成安全漏洞。
如果您的开发者门户位于使用 TLS 终结 的负载平衡器后面,并且您希望通过 https:// 提供所有流量,则网站网页将需要仅包含 https:// 链接,并且您需要将以下代码添加到开发者门户的 sites/default/settings.local.php(云端)或 sites/default/settings.php(私有云)文件中。由于负载平衡器不会自动转换 HTML 网页的内容,因此该代码可确保传递给客户端的所有链接都以 https:// 开头。
如需使用负载平衡器配置 TLS,请将以下行添加到 sites/default/settings.local.php(云)或 sites/default/settings.php(私有云)文件中:
// Only check for SSL if we are not using PHP from the command line. if (PHP_SAPI != 'cli') { // Assume we can't detect SSL unless proven otherwise. $can_detect_ssl = FALSE; // Set HTTPS URL of portal $base_url = 'https://developers.myCo.com'; if (isset($_SERVER['HTTP_X_FORWARDED_PROTO' ]) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) { $can_detect_ssl = TRUE; } if (isset($_SERVER['HTTP_X_FORWARDED_PROTO' ]) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO' ]) == 'https') { $_SERVER['HTTPS'] = 'on'; } if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') { header('HTTP/1.0 301 Moved Permanently'); // You could optionally substitute a canonical server name for $_SERVER['HTTP_HOST'] here. header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); exit; } }
有关详情,请参阅:
- https://drupal.org/node/425990
- https://drupal.org/node/313145
- http://drupal.stackexchange.com/questions/102091/drupal-behind-a-ssl-offloading-reverse-proxy-is-this-config-correct
将门户流量重定向到 HTTPS
您可以通过更新 sites/default/settings.local.php (Cloud) 或 sites/default/settings.php(私有云)文件,将所有门户流量重定向到 HTTPS。所需的更新因您是重定向到同一主机名还是多个主机名上的 HTTPS 而异。
重定向到同一主机名上的 HTTPS
将以下代码添加到 sites/default/settings.local.php (Cloud) 或 sites/default/settings.php (Private Cloud) 文件,以将所有门户流量重定向到同一主机名 (例如 *.devportal.apigee.io) 上的 HTTPS。
在这种情况下,如果开发者访问的门户网址为 live-example.devportal.apigee.io,但需要访问为 devportal.example.com 上传的证书,则请求会失败。
// Only check for SSL if we are not using PHP from the command line. if (PHP_SAPI != 'cli') { // Assume we can't detect SSL unless proven otherwise. $can_detect_ssl = FALSE; if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) { $can_detect_ssl = TRUE; } if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') { $_SERVER['HTTPS'] = 'on'; } if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') { header('HTTP/1.0 301 Moved Permanently'); header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); exit; } }
在多个主机名上重定向到 HTTPS
将以下代码添加到 sites/default/settings.local.php 文件(云)或 sites/default/settings.php 文件(私有云),以将所有门户流量重定向到多个主机名上的 HTTPS。
// Only check for SSL if we are not using PHP from the command line. if (PHP_SAPI != 'cli') { // Assume we can't detect SSL unless proven otherwise. $can_detect_ssl = FALSE; // Assume we are not forcing a redirect until proven otherwise. $force_redirect = FALSE; if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) { $can_detect_ssl = TRUE; } if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') { $_SERVER['HTTPS'] = 'on'; } if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') { // We will force a redirect because HTTPS is required. $force_redirect = TRUE; } // This works on Pantheon only; the constant is undefined elsewhere. switch (PANTHEON_ENVIRONMENT) { case 'dev': $canonical_hostname = 'dev.devportal.example.com'; break; case 'test': $canonical_hostname = 'test.devportal.example.com'; break; case 'live': $canonical_hostname = 'devportal.example.com'; break; default: $canonical_hostname = strtolower($_SERVER['HTTP_HOST']); break; } if ($canonical_hostname != strtolower($_SERVER['HTTP_HOST'])) { // We will force a redirect because hostname is not canonical. $force_redirect = TRUE; } if ($force_redirect) { header('HTTP/1.0 301 Moved Permanently'); header('Location: https://' . $canonical_hostname . $_SERVER['REQUEST_URI']); exit; } }