摘要:本教程將幫助您部署一個支持的快速,安全的服務器。該變量告訴對支持協議的瀏覽器啟用。默認情況下,設置為下劃線,這意味著配置文件負責所有傳入的請求。這個頭部還能保護我們免受協議降級攻擊。
原文:How To Set Up Nginx with HTTP/2 Support on Ubuntu 16.04 | DigitalOcean
作者:Sergey Zhukaev
NGINX 是一個快速可靠的開源Web服務器。由于其內存占用空間小,可擴展性高,易于配置,并支持絕大多數協議,因此受到歡迎。
本教程將幫助您部署一個支持HTTP / 2 的快速,安全的 Nginx 服務器。
在開始之前,我們需要幾件事情:
Ubuntu 16.04 Droplet
具有sudo權限的非root用戶(有關詳細信息,請查看Ubuntu 16.04初始服務器設置。)
完全注冊域名 您可以在 Namecheap
上購買一張或在 Freenom 上免費獲得一張。
確保您的域名配置為指向您的Droplet。如果需要幫助,請參閱本教程。
SSL證書。生成自簽名證書,從“我們加密”獲取一個免費的證書,或從另一個提供商處購買一個。
就這些。如果您有上面列出的所有內容,您隨時可以去。
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包系統中更新可用包的列表:
$ sudo apt-get update
然后,安裝Nginx:
$ sudo apt-get install nginx
安裝過程完成后,您可以鍵入以下內容檢查Nginx的版本:
$ sudo nginx -v
輸出應類似于以下內容:
// sudo nginx -v 輸出結果 nginx version: nginx/1.10.0 (Ubuntu)
在接下來的幾個步驟中,我們將修改Nginx配置文件。每個步驟都將更改Nginx配置選項。我們將一路測試配置文件的語法。最后,我們將驗證Nginx是否支持HTTP / 2,并進行一些更改以優化性能。
步驟2 - 更改收聽端口并啟用HTTP / 2我們的第一個更改是將監聽端口80改為443。
打開配置文件:
$ sudo nano /etc/nginx/sites-available/default
默認情況下,Nginx設置為監聽80端口,這是標準的HTTP端口:
// 在/etc/nginx/sites-available/default中 listen 80 default_server; listen [::]:80 default_server;
你可以看到,我們有兩個不同的listen變量。第一個是用于所有IPv4連接。第二個是用于IPv6連接。我們將為兩者啟用加密。
修改監聽端口為HTTPS協議使用的443:
// 在/etc/nginx/sites-available/default中 listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server;
注意,除 ssl 之外,我們還加入 http2 。該變量告訴Nginx對支持HTTP2協議的瀏覽器啟用HTTP / 2。
步驟3 - 更改服務器名稱我們使用server_name條目來指定哪個域名與配置文件相關聯。找到server_name配置文件中的條目。
默認情況下,server_name設置為 _(下劃線),這意味著配置文件負責所有傳入的請求。更改 _ 為你的實際域名,如下所示:
server_name example.com;
保存配置文件并退出文本編輯器。。
每當您對Nginx配置文件進行更改時,應檢查配置中是否存在語法錯誤,如下所示:
$ sudo nginx -t
如果語法無錯誤,你將看到以下輸出:
// sudo nginx -t的輸出 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful步驟4 - 添加SSL證書
接下來,您需要配置Nginx以使用您的SSL證書。如果您不知道什么是SSL證書,或者目前沒有SSL證書,請按照本文“前提”部分中的其中一個教程進行操作。
創建一個目錄以將您的SSL證書存儲在Nginx配置目錄中:
$ sudo mkdir /etc/nginx/ssl
將您的證書和私鑰復制到此路徑。我們還將重命名文件以顯示它們所關聯的域名。當您有多個域與此服務器關聯時,將來將會派上用場。替換example.com為您的實際主機名:
$ sudo cp /path/to/your/certificate.crt /etc/nginx/ssl/example.com.crt $ sudo cp /path/to/your/private.key /etc/nginx/ssl/example.com.key
現在,我們再次打開我們的配置文件,并配置SSL。
$ sudo nano /etc/nginx/sites-available/default
在server塊內的新行上,定義證書的位置:
// 在/etc/nginx/sites-available/default中 ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key;
保存文件,并退出文本編輯器。
步驟5 - 避免舊加密套件HTTP / 2有一個巨大的黑名單包含舊的和不安全的密碼,所以我們必須避免它們。加密套件是一堆加密算法,它們描述了傳輸數據的加密方式。
我們將使用一個非常受歡迎的密碼集,其安全性被CloudFlare等互聯網巨頭批準。它不允許使用MD5加密(自1996年以來被標記為不安全,雖然存在這一事實,但目前為止它還在被使用)。
打開以下配置文件:
$ sudo nano /etc/nginx/nginx.conf
在ssl_prefer_server_ciphers on;之后添加下面這行。
// 在/etc/nginx/nginx.conf中 ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
保存文件,并退出文本編輯器。
再次檢查配置語法錯誤:
$ sudo nginx -t步驟6 - 增加密鑰交換安全性
建立安全連接的第一步是在服務器和客戶端之間交換私鑰。問題是,這個時候,它們之間的連接沒有加密 —— 這意味著傳輸的數據對任何第三方都是可見的。這就是為什么我們需要Diffie-Hellman-Merkle算法。關于它如何工作的技術細節是一個復雜的事情,無法簡單解釋,但如果您對細節感興趣,則可以觀看此YouTube視頻。
默認情況下,Nginx使用1028位DHE(短暫的Diffie-Hellman)密鑰,這是相對容易解密的。為了提供最大的安全性,我們應該建立自己的,更安全的DHE密鑰。
要做到這一點,請鍵入以下命令:
$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
請記住,我們應該在與SSL證書相同的文件夾中生成DH參數。在本教程中,證書位于/etc/nginx/ssl/。原因是Nginx總是在證書文件夾中查找用戶提供的DHE密鑰,如果存在,則使用它。
在文件路徑(在我們的例子中2048)之后的變量指定密鑰的長度。2048位長度的密鑰是足夠安全的,由Mozilla基金會推薦,但如果您正在尋找更多的加密,則可以將其更改為4096。
生成過程大約需要5分鐘。
一旦完成,再次打開默認的Nginx配置文件:
$ sudo nano /etc/nginx/sites-available/default
在 server 塊內的新行中,設置自定義DHE密鑰的路徑:
// 在/etc/nginx/sites-available/default中 ssl_dhparam /etc/nginx/ssl/dhparam.pem;步驟7 - 將所有HTTP請求重定向到HTTPS
由于我們希望僅通過HTTPS提供內容,所以我們應該告訴Nginx如果服務器收到HTTP請求應該做什么。
在我們的文件底部,我們將創建一個新的server塊,用于將所有HTTP請求重定向到HTTPS(請務必使用實際的域名替換服務器名稱):
// 在/etc/nginx/sites-available/default中 server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; }
保存并退出配置文件。
檢查語法錯誤的配置:
$ sudo nginx -t步驟8 - 重新加載Nginx
這就是所有的Nginx配置更改。由于我們檢查每個更改的語法錯誤,您應該準備好重新啟動Nginx并測試更改。
總而言之,忽略注釋掉的行,您的配置文件現在應該類似于:
// 在/etc/nginx/sites-available/default中 server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name example.com; location / { try_files $uri $uri/ =404; } ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_dhparam /etc/nginx/ssl/dhparam.pem; } server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; }
要更改生效,請重新啟動Nginx服務器。
# sudo systemctl restart nginx步驟9 - 驗證變更
我們來檢查一下我們的服務器是否正常運行。打開您的網絡瀏覽器并導航到您的域(替換example.com為您的實際域名):
example.com
如果一切配置正確,您應該自動重定向到HTTPS。現在,我們來看看HTTP / 2是否正常工作:打開Chrome開發工具(View - > Developer - > Developer Tools)并重新加載頁面(View - > Reload This Page)。然后導航到 Network 選項卡,指向從Name開始的表頭所在行,右鍵單擊它,然后選擇 Protocol 選項。
現在您應該看到h2(代表HTTP / 2)的新列,表示您的網站提供HTTP / 2服務。
在這一點上,我們的服務器已經準備好通過HTTP / 2協議提供內容了,但是我們仍然需要為生產環境的服務器做一些準備。
首先,我們 nginx.conf 通過在控制臺中鍵入以下內容來打開它們:
在此步驟中,我們將調整主Nginx配置文件,以獲得最佳性能和安全性。
$ sudo nano /etc/nginx/nginx.conf啟用連接憑據緩存
與HTTP相比,HTTPS需要相對較長的時間來建立服務器和用戶之間的初始連接。為了最小化頁面加載速度的差異,我們將啟用連接憑據的緩存。這意味著,不是在所請求的每個頁面上創建一個新的會話,服務器將使用緩存版本的憑據。
要啟用會話緩存,http 請在 nginx.conf 文件塊的末尾添加這些行:
// 在/etc/nginx/nginx.conf中 ssl_session_cache shared:SSL:5m; ssl_session_timeout 1h;
ssl_session_cache 指定將包含會話信息的高速緩存的大小。1 MB可以存儲大約4000個會話的信息。對于大多數用戶來說,默認值為5 MB是足夠的,但如果您預期流量很大,則可以相應地增加該值。
ssl_session_timeout 限制特定會話存儲在緩存中的時間。該值不應該太大(超過一個小時),但是將值設置得太低也是沒有意義的。
即使我們已經將所有常規HTTP請求重定向到我們的Nginx配置文件中的HTTPS,我們還應該啟用HSTS,以避免這些重定向操作。
如果瀏覽器找到HSTS頭部,則在給定的時間段內不會再嘗試通過常規HTTP連接到服務器。無論如何,它將只使用加密的HTTPS連接交換數據。這個頭部還能保護我們免受協議降級攻擊。
將以下行添加到nginx.conf:
// 在/etc/nginx/nginx.conf中 add_header Strict-Transport-Security "max-age=15768000" always;
max-age以秒為單位設定。15768000秒相當于6個月。
默認情況下,此頭部不會添加到子域請求中。如果您有子域名并希望HSTS適用于所有這些域,則應在該行的末尾添加includeSubDomains變量,如下所示:
// 在/etc/nginx/nginx.conf中 add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
保存文件,并退出文本編輯器。
再次檢查配置語法錯誤:
$ sudo nginx -t
最后,重新啟動Nginx服務器以應用更改。
$ sudo systemctl restart nginx結論
您的Nginx服務器現在提供HTTP / 2頁面。如果您想測試SSL連接的強度,請訪問 Qualys SSL實驗室,并針對您的服務器運行測試。如果一切配置正確,您應該獲得一個A +標記的安全。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39666.html
摘要:通過類似的操作來方便用戶獲取分發和更新應用鏡像,指令簡明,學習成本較低。例如存放操作系統鏡像的倉庫,稱為倉庫,其中可能包括等不同版本的鏡像。管理服務如使用實際上是執行了命令。啟動使用即退出容器,并后臺運行。 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制...
閱讀 3344·2021-11-10 11:36
閱讀 3244·2021-10-08 10:21
閱讀 2841·2021-09-29 09:35
閱讀 2416·2021-09-22 16:06
閱讀 3958·2021-09-09 09:33
閱讀 1326·2019-08-30 15:44
閱讀 3171·2019-08-30 10:59
閱讀 2981·2019-08-29 15:32