SNI
我們知道,在 Nginx 中可以通過指定不同的 server_name 來配置多個站點。HTTP/1.1 協定請求頭中的 Host 字段可以辨別出目前請求屬于哪個站點。但是對于 HTTPS 網站來說,要想發送 HTTP 資料,必須等待 SSL 握手完成,而在握手階段服務端就必須提供網站證書。對于在同一個 IP 部署不同 HTTPS 站點,并且還使用了不同證書的情況下,服務端怎麼知道該發送哪個證書?
Server Name Indication,簡稱為 SNI,是 TLS 的一個擴充,為解決這個問題應運而生。有了 SNI,服務端可以通過 Client Hello 中的 SNI 擴充拿到使用者要通路網站的 Server Name,進而發送與之比對的證書,順利完成 SSL 握手。
參考文檔:
關于啟用 HTTPS 的一些經驗分享(一)
新的nginx叢集配置了多個ssl證書,是以用戶端必須支援SNI才能正确通路https的域名。