您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
您可以將入口網站設為使用 TLS。入口網站的 TLS 設定程序取決於入口網站的部署方式:
- Cloud:從 Pantheon 或 Acquia 設定 TLS,這是入口網站的雲端代管服務。
- Apigee Edge for Private Cloud:在代管入口網站的伺服器上,於地端部署環境設定 TLS。
傳輸層安全標準 (TLS) 和入口網站
下圖顯示入口網站使用 TLS 的兩個位置:

- 用於入口網站與 Edge 管理 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 Management API 連線的程序,請參閱建立開發人員入口網站。
雲端版 Edge
如果入口網站連線至雲端版 Edge,Apigee 會預先設定 Edge 管理 API 的網址,以使用 TLS。設定入口網站時,您可以使用網址 https://api.enterprise.apigee.com/v1 存取 Edge 管理 API。
在私有雲中安裝 Edge
如果是 Edge 私有雲安裝,Edge 管理 API 的網址格式如下:
http://EdgePrivateCloudIp:8080/v1
或:
https://EdgePrivateCloudIp:TLSport/v1
其中 EdgePrivateCloudIp 是 Edge Management Server 伺服器的 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 for Private Cloud 入口網站
如要安裝 Apigee 建議的入口網站 Private Cloud,入口網站必須位於負載平衡器後方,如下所示:

因此,如果是地端部署,您有兩種設定 TLS 的方式:
- 在負載平衡器上設定 TLS:在負載平衡器本身設定 TLS,而非在入口網站上設定。因此,您用來設定 TLS 的程序取決於負載平衡器。詳情請參閱負載平衡器的說明文件。
- 在入口網站本身設定 TLS:如有需要,您可以在託管入口網站的網路伺服器上設定 TLS。詳情請參閱「設定入口網站以使用 HTTPS」。
您必須先取得自己的 TLS 憑證,才能將入口網站部署到實際工作環境。
設定其他 TLS 設定
您可以編輯 sites/default/settings.local.php (雲端) 或 sites/default/settings.php (Private Cloud) 檔案,變更入口網站的 TLS 設定。
編輯檔案時,請新增 ini_set() 函式的例項,設定屬性。 如要進一步瞭解這項函式,請參閱:http://php.net/manual/en/function.ini-set.php。
您可以在 sites/default/settings.local.php (Cloud) 或 sites/default/settings.php (Private Cloud) 檔案中設定下列屬性:
- 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 (雲端) 或 sites/default/settings.php (私有雲) 檔案,將所有入口網站流量重新導向至 HTTPS。所需更新內容會因重新導向至 HTTPS 的主機名稱數量而異。
重新導向至相同主機名稱的 HTTPS
將下列程式碼新增至 sites/default/settings.local.php (雲端) 或 sites/default/settings.php (私有雲) 檔案,將所有入口網站流量重新導向至相同主機名稱 (例如 *.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; } }