摘要:本教程將幫助您部署一個(gè)支持的快速,安全的服務(wù)器。該變量告訴對(duì)支持協(xié)議的瀏覽器啟用。默認(rèn)情況下,設(shè)置為下劃線,這意味著配置文件負(fù)責(zé)所有傳入的請(qǐng)求。這個(gè)頭部還能保護(hù)我們免受協(xié)議降級(jí)攻擊。
原文:How To Set Up Nginx with HTTP/2 Support on Ubuntu 16.04 | DigitalOcean
作者:Sergey Zhukaev
NGINX 是一個(gè)快速可靠的開源Web服務(wù)器。由于其內(nèi)存占用空間小,可擴(kuò)展性高,易于配置,并支持絕大多數(shù)協(xié)議,因此受到歡迎。
本教程將幫助您部署一個(gè)支持HTTP / 2 的快速,安全的 Nginx 服務(wù)器。
在開始之前,我們需要幾件事情:
Ubuntu 16.04 Droplet
具有sudo權(quán)限的非root用戶(有關(guān)詳細(xì)信息,請(qǐng)查看Ubuntu 16.04初始服務(wù)器設(shè)置。)
完全注冊(cè)域名 您可以在 Namecheap
上購買一張或在 Freenom 上免費(fèi)獲得一張。
確保您的域名配置為指向您的Droplet。如果需要幫助,請(qǐng)參閱本教程。
SSL證書。生成自簽名證書,從“我們加密”獲取一個(gè)免費(fèi)的證書,或從另一個(gè)提供商處購買一個(gè)。
就這些。如果您有上面列出的所有內(nèi)容,您隨時(shí)可以去。
HTTP / 2 是超文本傳輸??協(xié)議的新版本,在 Web 上用于從服務(wù)器到瀏覽器傳送頁面。HTTP / 2 是近二十年來 HTTP 的第一個(gè)主要更新:HTTP1.1在1999年被引入公眾,當(dāng)時(shí)網(wǎng)頁一般是一個(gè)帶有內(nèi)聯(lián)CSS樣式表的HTML文件?;ヂ?lián)網(wǎng)自那以后發(fā)生了巨大的變化,現(xiàn)在我們面臨著HTTP 1.1的局限性——該協(xié)議限制了大多數(shù)現(xiàn)代網(wǎng)站的潛在傳輸速度,因?yàn)樗螺d頁面的過程是一個(gè)隊(duì)列(下一部分開始下載前,前一部分必須下載完),一般現(xiàn)代網(wǎng)頁需要大約100個(gè)請(qǐng)求下載(每個(gè)請(qǐng)求都是圖片,js文件,css文件等等)。
HTTP / 2解決了這個(gè)問題,因?yàn)樗鼛砹艘恍└拘缘淖兓?/p>
所有請(qǐng)求都是并行下載的,而不是在隊(duì)列中
HTTP頭部被壓縮
頁面作為二進(jìn)制文件傳輸,而不是作為文本文件,這更高效
即使沒有用戶的請(qǐng)求,服務(wù)器也可以“推送”數(shù)據(jù),這樣可以提高延遲較高用戶的速度
盡管HTTP / 2不需要加密,但兩款最受歡迎的瀏覽器(Chrome瀏覽器和Mozilla Firefox)的開發(fā)人員表示,為了安全起見,他們將僅為HTTPS 連接提供HTTP / 2支持。因此,如果您決定在服務(wù)器支持HTTP / 2,則必須使用HTTPS。
步驟1 - 安裝最新版本的Nginx在Nginx 1.9.5中加入了HTTP / 2協(xié)議的支持。幸運(yùn)的是,Ubuntu 16.04中的默認(rèn)鏡像源包含的nginx版本高于此版本,因此我們不必添加第三方鏡像源。
首先,在apt包系統(tǒng)中更新可用包的列表:
$ sudo apt-get update
然后,安裝Nginx:
$ sudo apt-get install nginx
安裝過程完成后,您可以鍵入以下內(nèi)容檢查Nginx的版本:
$ sudo nginx -v
輸出應(yīng)類似于以下內(nèi)容:
// sudo nginx -v 輸出結(jié)果 nginx version: nginx/1.10.0 (Ubuntu)
在接下來的幾個(gè)步驟中,我們將修改Nginx配置文件。每個(gè)步驟都將更改Nginx配置選項(xiàng)。我們將一路測(cè)試配置文件的語法。最后,我們將驗(yàn)證Nginx是否支持HTTP / 2,并進(jìn)行一些更改以優(yōu)化性能。
步驟2 - 更改收聽端口并啟用HTTP / 2我們的第一個(gè)更改是將監(jiān)聽端口80改為443。
打開配置文件:
$ sudo nano /etc/nginx/sites-available/default
默認(rèn)情況下,Nginx設(shè)置為監(jiān)聽80端口,這是標(biāo)準(zhǔn)的HTTP端口:
// 在/etc/nginx/sites-available/default中 listen 80 default_server; listen [::]:80 default_server;
你可以看到,我們有兩個(gè)不同的listen變量。第一個(gè)是用于所有IPv4連接。第二個(gè)是用于IPv6連接。我們將為兩者啟用加密。
修改監(jiān)聽端口為HTTPS協(xié)議使用的443:
// 在/etc/nginx/sites-available/default中 listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server;
注意,除 ssl 之外,我們還加入 http2 。該變量告訴Nginx對(duì)支持HTTP2協(xié)議的瀏覽器啟用HTTP / 2。
步驟3 - 更改服務(wù)器名稱我們使用server_name條目來指定哪個(gè)域名與配置文件相關(guān)聯(lián)。找到server_name配置文件中的條目。
默認(rèn)情況下,server_name設(shè)置為 _(下劃線),這意味著配置文件負(fù)責(zé)所有傳入的請(qǐng)求。更改 _ 為你的實(shí)際域名,如下所示:
server_name example.com;
保存配置文件并退出文本編輯器。。
每當(dāng)您對(duì)Nginx配置文件進(jìn)行更改時(shí),應(yīng)檢查配置中是否存在語法錯(cuò)誤,如下所示:
$ sudo nginx -t
如果語法無錯(cuò)誤,你將看到以下輸出:
// 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證書,請(qǐng)按照本文“前提”部分中的其中一個(gè)教程進(jìn)行操作。
創(chuàng)建一個(gè)目錄以將您的SSL證書存儲(chǔ)在Nginx配置目錄中:
$ sudo mkdir /etc/nginx/ssl
將您的證書和私鑰復(fù)制到此路徑。我們還將重命名文件以顯示它們所關(guān)聯(lián)的域名。當(dāng)您有多個(gè)域與此服務(wù)器關(guān)聯(lián)時(shí),將來將會(huì)派上用場(chǎng)。替換example.com為您的實(shí)際主機(jī)名:
$ 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
現(xiàn)在,我們?cè)俅未蜷_我們的配置文件,并配置SSL。
$ sudo nano /etc/nginx/sites-available/default
在server塊內(nèi)的新行上,定義證書的位置:
// 在/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有一個(gè)巨大的黑名單包含舊的和不安全的密碼,所以我們必須避免它們。加密套件是一堆加密算法,它們描述了傳輸數(shù)據(jù)的加密方式。
我們將使用一個(gè)非常受歡迎的密碼集,其安全性被CloudFlare等互聯(lián)網(wǎng)巨頭批準(zhǔn)。它不允許使用MD5加密(自1996年以來被標(biāo)記為不安全,雖然存在這一事實(shí),但目前為止它還在被使用)。
打開以下配置文件:
$ 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;
保存文件,并退出文本編輯器。
再次檢查配置語法錯(cuò)誤:
$ sudo nginx -t步驟6 - 增加密鑰交換安全性
建立安全連接的第一步是在服務(wù)器和客戶端之間交換私鑰。問題是,這個(gè)時(shí)候,它們之間的連接沒有加密 —— 這意味著傳輸?shù)臄?shù)據(jù)對(duì)任何第三方都是可見的。這就是為什么我們需要Diffie-Hellman-Merkle算法。關(guān)于它如何工作的技術(shù)細(xì)節(jié)是一個(gè)復(fù)雜的事情,無法簡(jiǎn)單解釋,但如果您對(duì)細(xì)節(jié)感興趣,則可以觀看此YouTube視頻。
默認(rèn)情況下,Nginx使用1028位DHE(短暫的Diffie-Hellman)密鑰,這是相對(duì)容易解密的。為了提供最大的安全性,我們應(yīng)該建立自己的,更安全的DHE密鑰。
要做到這一點(diǎn),請(qǐng)鍵入以下命令:
$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
請(qǐng)記住,我們應(yīng)該在與SSL證書相同的文件夾中生成DH參數(shù)。在本教程中,證書位于/etc/nginx/ssl/。原因是Nginx總是在證書文件夾中查找用戶提供的DHE密鑰,如果存在,則使用它。
在文件路徑(在我們的例子中2048)之后的變量指定密鑰的長(zhǎng)度。2048位長(zhǎng)度的密鑰是足夠安全的,由Mozilla基金會(huì)推薦,但如果您正在尋找更多的加密,則可以將其更改為4096。
生成過程大約需要5分鐘。
一旦完成,再次打開默認(rèn)的Nginx配置文件:
$ sudo nano /etc/nginx/sites-available/default
在 server 塊內(nèi)的新行中,設(shè)置自定義DHE密鑰的路徑:
// 在/etc/nginx/sites-available/default中 ssl_dhparam /etc/nginx/ssl/dhparam.pem;步驟7 - 將所有HTTP請(qǐng)求重定向到HTTPS
由于我們希望僅通過HTTPS提供內(nèi)容,所以我們應(yīng)該告訴Nginx如果服務(wù)器收到HTTP請(qǐng)求應(yīng)該做什么。
在我們的文件底部,我們將創(chuàng)建一個(gè)新的server塊,用于將所有HTTP請(qǐng)求重定向到HTTPS(請(qǐng)務(wù)必使用實(shí)際的域名替換服務(wù)器名稱):
// 在/etc/nginx/sites-available/default中 server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; }
保存并退出配置文件。
檢查語法錯(cuò)誤的配置:
$ sudo nginx -t步驟8 - 重新加載Nginx
這就是所有的Nginx配置更改。由于我們檢查每個(gè)更改的語法錯(cuò)誤,您應(yīng)該準(zhǔn)備好重新啟動(dòng)Nginx并測(cè)試更改。
總而言之,忽略注釋掉的行,您的配置文件現(xiàn)在應(yīng)該類似于:
// 在/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; }
要更改生效,請(qǐng)重新啟動(dòng)Nginx服務(wù)器。
# sudo systemctl restart nginx步驟9 - 驗(yàn)證變更
我們來檢查一下我們的服務(wù)器是否正常運(yùn)行。打開您的網(wǎng)絡(luò)瀏覽器并導(dǎo)航到您的域(替換example.com為您的實(shí)際域名):
example.com
如果一切配置正確,您應(yīng)該自動(dòng)重定向到HTTPS?,F(xiàn)在,我們來看看HTTP / 2是否正常工作:打開Chrome開發(fā)工具(View - > Developer - > Developer Tools)并重新加載頁面(View - > Reload This Page)。然后導(dǎo)航到 Network 選項(xiàng)卡,指向從Name開始的表頭所在行,右鍵單擊它,然后選擇 Protocol 選項(xiàng)。
現(xiàn)在您應(yīng)該看到h2(代表HTTP / 2)的新列,表示您的網(wǎng)站提供HTTP / 2服務(wù)。
在這一點(diǎn)上,我們的服務(wù)器已經(jīng)準(zhǔn)備好通過HTTP / 2協(xié)議提供內(nèi)容了,但是我們?nèi)匀恍枰獮樯a(chǎn)環(huán)境的服務(wù)器做一些準(zhǔn)備。
首先,我們 nginx.conf 通過在控制臺(tái)中鍵入以下內(nèi)容來打開它們:
在此步驟中,我們將調(diào)整主Nginx配置文件,以獲得最佳性能和安全性。
$ sudo nano /etc/nginx/nginx.conf啟用連接憑據(jù)緩存
與HTTP相比,HTTPS需要相對(duì)較長(zhǎng)的時(shí)間來建立服務(wù)器和用戶之間的初始連接。為了最小化頁面加載速度的差異,我們將啟用連接憑據(jù)的緩存。這意味著,不是在所請(qǐng)求的每個(gè)頁面上創(chuàng)建一個(gè)新的會(huì)話,服務(wù)器將使用緩存版本的憑據(jù)。
要啟用會(huì)話緩存,http 請(qǐng)?jiān)?nginx.conf 文件塊的末尾添加這些行:
// 在/etc/nginx/nginx.conf中 ssl_session_cache shared:SSL:5m; ssl_session_timeout 1h;
ssl_session_cache 指定將包含會(huì)話信息的高速緩存的大小。1 MB可以存儲(chǔ)大約4000個(gè)會(huì)話的信息。對(duì)于大多數(shù)用戶來說,默認(rèn)值為5 MB是足夠的,但如果您預(yù)期流量很大,則可以相應(yīng)地增加該值。
ssl_session_timeout 限制特定會(huì)話存儲(chǔ)在緩存中的時(shí)間。該值不應(yīng)該太大(超過一個(gè)小時(shí)),但是將值設(shè)置得太低也是沒有意義的。
即使我們已經(jīng)將所有常規(guī)HTTP請(qǐng)求重定向到我們的Nginx配置文件中的HTTPS,我們還應(yīng)該啟用HSTS,以避免這些重定向操作。
如果瀏覽器找到HSTS頭部,則在給定的時(shí)間段內(nèi)不會(huì)再嘗試通過常規(guī)HTTP連接到服務(wù)器。無論如何,它將只使用加密的HTTPS連接交換數(shù)據(jù)。這個(gè)頭部還能保護(hù)我們免受協(xié)議降級(jí)攻擊。
將以下行添加到nginx.conf:
// 在/etc/nginx/nginx.conf中 add_header Strict-Transport-Security "max-age=15768000" always;
max-age以秒為單位設(shè)定。15768000秒相當(dāng)于6個(gè)月。
默認(rèn)情況下,此頭部不會(huì)添加到子域請(qǐng)求中。如果您有子域名并希望HSTS適用于所有這些域,則應(yīng)在該行的末尾添加includeSubDomains變量,如下所示:
// 在/etc/nginx/nginx.conf中 add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
保存文件,并退出文本編輯器。
再次檢查配置語法錯(cuò)誤:
$ sudo nginx -t
最后,重新啟動(dòng)Nginx服務(wù)器以應(yīng)用更改。
$ sudo systemctl restart nginx結(jié)論
您的Nginx服務(wù)器現(xiàn)在提供HTTP / 2頁面。如果您想測(cè)試SSL連接的強(qiáng)度,請(qǐng)?jiān)L問 Qualys SSL實(shí)驗(yàn)室,并針對(duì)您的服務(wù)器運(yùn)行測(cè)試。如果一切配置正確,您應(yīng)該獲得一個(gè)A +標(biāo)記的安全。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39666.html
摘要:它對(duì)于每一個(gè)容器來說都是唯一的,所以我們可以使用它。首先,我們要確保容器正在運(yùn)行。命令可以查詢進(jìn)程的所有容器。創(chuàng)建成功后會(huì)返回這個(gè)鏡像的信息。請(qǐng)先自行注冊(cè)我們登陸吧輸入對(duì)應(yīng)的,,后,提示表示登陸成功上傳自己的鏡像等待上傳完畢即可。。。。 什么是Docker? 簡(jiǎn)介:Docker是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。開發(fā)者在筆記本上編譯測(cè)試通過...
摘要:通過類似的操作來方便用戶獲取分發(fā)和更新應(yīng)用鏡像,指令簡(jiǎn)明,學(xué)習(xí)成本較低。例如存放操作系統(tǒng)鏡像的倉庫,稱為倉庫,其中可能包括等不同版本的鏡像。管理服務(wù)如使用實(shí)際上是執(zhí)行了命令。啟動(dòng)使用即退出容器,并后臺(tái)運(yùn)行。 Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制...
閱讀 3356·2021-11-10 11:36
閱讀 3252·2021-10-08 10:21
閱讀 2889·2021-09-29 09:35
閱讀 2432·2021-09-22 16:06
閱讀 3994·2021-09-09 09:33
閱讀 1340·2019-08-30 15:44
閱讀 3183·2019-08-30 10:59
閱讀 2994·2019-08-29 15:32