當前位置:
首頁 > 最新 > 如何在Ubuntu 16.04上部署支持HTTP/2的Nginx

如何在Ubuntu 16.04上部署支持HTTP/2的Nginx

介紹

NGINX 是一個快速可靠的開源Web伺服器。由於其內存佔用空間小,可擴展性高,易於配置,並支持絕大多數協議,因此受到歡迎。本教程將幫助您部署一個支持HTTP / 2 的快速,安全的 Nginx 伺服器。

前提

在開始之前,我們需要幾件事情:

Ubuntu 16.04 Droplet

具有sudo許可權的非root用戶(有關詳細信息,請查看Ubuntu 16.04初始伺服器設置。)

完全註冊域名 您可以在 Namecheap 上購買一張或在 Freenom 上免費獲得一張。

確保您的域名配置為指向您的Droplet。如果需要幫助,請參閱本教程。

SSL證書。生成自簽名證書,從「我們加密」獲取一個免費的證書,或從另一個提供商處購買一個。

就這些。如果您有上面列出的所有內容,您隨時可以去。

HTTP 1.1和HTTP / 2之間的區別

HTTP / 2 是超文本傳輸協議的新版本,在 Web 上用於從伺服器到瀏覽器傳送頁面。HTTP / 2 是近二十年來 HTTP 的第一個主要更新:HTTP1.1在1999年被引入公眾,當時網頁一般是一個帶有內聯CSS樣式表的HTML文件。互聯網自那以後發生了巨大的變化,現在我們面臨著HTTP 1.1的局限性——該協議限制了大多數現代網站的潛在傳輸速度,因為它下載頁面的過程是一個隊列(下一部分開始下載前,前一部分必須下載完),一般現代網頁需要大約100個請求下載(每個請求都是圖片,js文件,css文件等等)。

HTTP / 2解決了這個問題,因為它帶來了一些根本性的變化:

所有請求都是並行下載的,而不是在隊列中

HTTP頭部被壓縮

頁面作為二進位文件傳輸,而不是作為文本文件,這更高效

即使沒有用戶的請求,伺服器也可以「推送」數據,這樣可以提高延遲較高用戶的速度

儘管HTTP / 2不需要加密,但兩款最受歡迎的瀏覽器(Chrome瀏覽器和Mozilla Firefox)的開發人員表示,為了安全起見,他們將僅為HTTPS 連接提供HTTP / 2支持。因此,如果您決定在伺服器支持HTTP / 2,則必須使用HTTPS。

步驟1 - 安裝最新版本的Nginx

在Nginx 1.9.5中加入了HTTP / 2協議的支持。幸運的是,Ubuntu 16.04中的默認鏡像源包含的nginx版本高於此版本,因此我們不必添加第三方鏡像源。

首先,在apt包系統中更新可用包的列表:

然後,安裝Nginx:

安裝過程完成後,您可以鍵入以下內容檢查Nginx的版本:

輸出應類似於以下內容:

在接下來的幾個步驟中,我們將修改Nginx配置文件。每個步驟都將更改Nginx配置選項。我們將一路測試配置文件的語法。最後,我們將驗證Nginx是否支持HTTP / 2,並進行一些更改以優化性能。

步驟2 - 更改收聽埠並啟用HTTP / 2

我們的第一個更改是將監聽埠80改為443。

打開配置文件:

默認情況下,Nginx設置為監聽80埠,這是標準的HTTP埠:

你可以看到,我們有兩個不同的listen變數。第一個是用於所有IPv4連接。第二個是用於IPv6連接。我們將為兩者啟用加密。

修改監聽埠為HTTPS協議使用的443:

注意,除 之外,我們還加入 。該變數告訴Nginx對支持 協議的瀏覽器啟用HTTP / 2。

步驟3 - 更改伺服器名稱

我們使用 條目來指定哪個域名與配置文件相關聯。找到 配置文件中的條目。

默認情況下, 設置為 (下劃線),這意味著配置文件負責所有傳入的請求。更改 為你的實際域名,如下所示:

保存配置文件並退出文本編輯器。。

每當您對Nginx配置文件進行更改時,應檢查配置中是否存在語法錯誤,如下所示:

如果語法無錯誤,你將看到以下輸出:

步驟4 - 添加SSL證書

接下來,您需要配置Nginx以使用您的SSL證書。如果您不知道什麼是SSL證書,或者目前沒有SSL證書,請按照本文「前提」部分中的其中一個教程進行操作。

創建一個目錄以將您的SSL證書存儲在Nginx配置目錄中:

將您的證書和私鑰複製到此路徑。我們還將重命名文件以顯示它們所關聯的域名。當您有多個域與此伺服器關聯時,將來將會派上用場。替換example.com為您的實際主機名:

現在,我們再次打開我們的配置文件,並配置SSL。

在server塊內的新行上,定義證書的位置:

保存文件,並退出文本編輯器。

步驟5 - 避免舊加密套件

HTTP / 2有一個巨大的黑名單包含舊的和不安全的密碼,所以我們必須避免它們。加密套件是一堆加密演算法,它們描述了傳輸數據的加密方式。我們將使用一個非常受歡迎的密碼集,其安全性被CloudFlare等互聯網巨頭批准。它不允許使用MD5加密(自1996年以來被標記為不安全,雖然存在這一事實,但目前為止它還在被使用)。

打開以下配置文件:

在 之後添加下面這行。

保存文件,並退出文本編輯器。再次檢查配置語法錯誤:

步驟6 - 增加密鑰交換安全性

建立安全連接的第一步是在伺服器和客戶端之間交換私鑰。問題是,這個時候,它們之間的連接沒有加密 —— 這意味著傳輸的數據對任何第三方都是可見的。這就是為什麼我們需要Diffie-Hellman-Merkle演算法。關於它如何工作的技術細節是一個複雜的事情,無法簡單解釋,但如果您對細節感興趣,則可以觀看此YouTube視頻。

默認情況下,Nginx使用1028位DHE(短暫的Diffie-Hellman)密鑰,這是相對容易解密的。為了提供最大的安全性,我們應該建立自己的,更安全的DHE密鑰。要做到這一點,請鍵入以下命令:

請記住,我們應該在與SSL證書相同的文件夾中生成DH參數。在本教程中,證書位於/etc/nginx/ssl/。原因是Nginx總是在證書文件夾中查找用戶提供的DHE密鑰,如果存在,則使用它。

在文件路徑(在我們的例子中 )之後的變數指定密鑰的長度。2048位長度的密鑰是足夠安全的,由Mozilla基金會推薦,但如果您正在尋找更多的加密,則可以將其更改為 。

生成過程大約需要5分鐘。

一旦完成,再次打開默認的Nginx配置文件:

在 塊內的新行中,設置自定義DHE密鑰的路徑:

步驟7 - 將所有HTTP請求重定向到HTTPS

由於我們希望僅通過HTTPS提供內容,所以我們應該告訴Nginx如果伺服器收到HTTP請求應該做什麼。

在我們的文件底部,我們將創建一個新的 塊,用於將所有HTTP請求重定向到HTTPS(請務必使用實際的域名替換伺服器名稱):

保存並退出配置文件。檢查語法錯誤的配置:

步驟8 - 重新載入Nginx

這就是所有的Nginx配置更改。由於我們檢查每個更改的語法錯誤,您應該準備好重新啟動Nginx並測試更改。總而言之,忽略注釋掉的行,您的配置文件現在應該類似於:

要更改生效,請重新啟動Nginx伺服器。

步驟9 - 驗證變更

我們來檢查一下我們的伺服器是否正常運行。打開您的網路瀏覽器並導航到您的域(替換example.com為您的實際域名):

如果一切配置正確,您應該自動重定向到HTTPS。現在,我們來看看HTTP / 2是否正常工作:打開Chrome開發工具(View - > Developer - > Developer Tools)並重新載入頁面(View - > Reload This Page)。然後導航到 選項卡,指向從 開始的表頭所在行,右鍵單擊它,然後選擇 選項。現在您應該看到 (代表HTTP / 2)的新列,表示您的網站提供HTTP / 2服務。在這一點上,我們的伺服器已經準備好通過HTTP / 2協議提供內容了,但是我們仍然需要為生產環境的伺服器做一些準備。

步驟10 - 優化Nginx以獲得最佳性能

首先,我們 通過在控制台中鍵入以下內容來打開它們:在此步驟中,我們將調整主Nginx配置文件,以獲得最佳性能和安全性。

啟用連接憑據緩存

與HTTP相比,HTTPS需要相對較長的時間來建立伺服器和用戶之間的初始連接。為了最小化頁面載入速度的差異,我們將啟用連接憑據的緩存。這意味著,不是在所請求的每個頁面上創建一個新的會話,伺服器將使用緩存版本的憑據。要啟用會話緩存, 請在 文件塊的末尾添加這些行:

指定將包含會話信息的高速緩存的大小。1 MB可以存儲大約4000個會話的信息。對於大多數用戶來說,默認值為5 MB是足夠的,但如果您預期流量很大,則可以相應地增加該值。 限制特定會話存儲在緩存中的時間。該值不應該太大(超過一個小時),但是將值設置得太低也是沒有意義的。

啟用HTTP嚴格傳輸安全(HSTS)

即使我們已經將所有常規HTTP請求重定向到我們的N

配置文件中的HTTPS,我們還應該啟用HSTS,以避免這些重定向操作。

如果瀏覽器找到HSTS頭部,則在給定的時間段內不會再嘗試通過常規HTTP連接到伺服器。無論如何,它將只使用加密的HTTPS連接交換數據。這個頭部還能保護我們免受協議降級攻擊。

將以下行添加到nginx.conf:

保存文件,並退出文本編輯器。

再次檢查配置語法錯誤:

最後,重新啟動Nginx伺服器以應用更改。

結論

您的Nginx伺服器現在提供HTTP / 2頁面。如果您想測試SSL連接的強度,請訪問 Qualys SSL實驗室,並針對您的伺服器運行測試。如果一切配置正確,您應該獲得一個A +標記的安全。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 京程一燈 的精彩文章:

Web真相:CSS不是真正的編程
國慶節前端技術棧充實計劃(6):Web 應用的 13 個優化步驟
國慶節前端技術棧充實計劃(1):使用Nginx配置HTTPS 伺服器
React與Preact PWA 性能分析報告
如何管理好10萬行代碼的前端單頁面應用

TAG:京程一燈 |