自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在 Ubuntu 20.04 上設(shè)置支持 HTTP/2 的 Nginx

系統(tǒng) Linux
Nginx是一個快速可靠的開源 Web 服務(wù)器。它因其低內(nèi)存占用、高可擴(kuò)展性、易于配置以及對多種協(xié)議的支持而廣受歡迎。

 介紹

Nginx是一個快速可靠的開源 Web 服務(wù)器。它因其低內(nèi)存占用、高可擴(kuò)展性、易于配置以及對多種協(xié)議的支持而廣受歡迎。

HTTP/2 是超文本傳輸協(xié)議的較新版本,用于在 Web 上將頁面從服務(wù)器傳送到瀏覽器。HTTP/2 是近二十年來 HTTP 的第一次重大更新:HTTP1.1 早在 1999 年就被引入公眾,當(dāng)時網(wǎng)頁的大小要小得多。從那時起,互聯(lián)網(wǎng)發(fā)生了巨大的變化,我們現(xiàn)在面臨著 HTTP 1.1 的限制。該協(xié)議限制了大多數(shù)現(xiàn)代網(wǎng)站的潛在傳輸速度,因?yàn)樗陉?duì)列中下載頁面的一部分——前一部分必須在下一部分開始下載之前完全下載——而一個普通的現(xiàn)代網(wǎng)頁會下載數(shù)十個單獨(dú)的 CSS、JavaScript、和圖像資產(chǎn)。

HTTP/2 解決了這個問題,因?yàn)樗鼛砹艘恍└拘缘淖兓?/p>

  •  所有請求都是并行下載的,而不是在隊(duì)列中
  •  HTTP 標(biāo)頭被壓縮
  •  頁面作為二進(jìn)制文件傳輸,而不是作為文本文件傳輸,這樣效率更高
  •  服務(wù)器可以在沒有用戶請求的情況下“推送”數(shù)據(jù),為高延遲用戶提高速度

盡管 HTTP/2 不需要加密,但兩個最流行的瀏覽器 Google Chrome 和 Mozilla Firefox 的開發(fā)人員表示,出于安全原因,他們將僅支持 HTTP/2 用于 HTTPS 連接。因此,如果您決定設(shè)置支持 HTTP/2 的服務(wù)器,您還必須使用 HTTPS 保護(hù)它們。

本教程將幫助您設(shè)置一個支持 HTTP/2 的快速且安全的 Nginx 服務(wù)器。

先決條件

在開始之前,您需要準(zhǔn)備一些東西:

  •  設(shè)置的 Ubuntu 20.04 服務(wù)器,包括 sudo 非 root 用戶和防火墻。
  •  Nginx 安裝在您的服務(wù)器上,您可以按照如何在 Ubuntu 20.04 上安裝 Nginx 來完成。
  •  配置為指向您的服務(wù)器的域名。
  •  為您的服務(wù)器配置的 TLS/SSL 證書。您有幾個選擇:
    •   您可以按照如何在 Ubuntu 20.04 上使用 Let's Encrypt 保護(hù) Nginx 來從Let's Encrypt獲得免費(fèi)證書。
    •   您還可以按照如何在 Ubuntu 20.04 中為 Nginx 創(chuàng)建自簽名 SSL 證書來生成和配置自簽名證書。
  •  Nginx 配置為將流量從端口重定向80到端口443,這應(yīng)該包含在前面的先決條件中。
  •  Nginx 配置為使用 2048 位或更高的 Ephemeral Diffie-Hellman (DHE) 密鑰,這也應(yīng)包含在先前的先決條件中。

步驟 1 — 啟用 HTTP/2 支持

如果您按照Nginx 安裝教程中的服務(wù)器塊設(shè)置步驟進(jìn)行操作,則您的域中應(yīng)該有一個服務(wù)器塊,并且已正確設(shè)置了指令。我們將進(jìn)行的第一個更改是修改您域的服務(wù)器塊以使用 HTTP/2。/etc/nginx/sites-available/your_domainserver_name

使用nano或首選編輯器打開您的域的配置文件:

  •  sudo nano /etc/nginx/sites-enabled/your_domain

在文件中,找到listen與 port 關(guān)聯(lián)的變量443:

/etc/nginx/sites-enabled/your_domain 

  1. ...  
  2.     listen [::]:443 ssl ipv6only=on;  
  3.     listen 443 ssl;  
  4. ... 

第一個用于 IPv6 連接。第二個用于所有 IPv4 連接。我們將為兩者啟用 HTTP/2。

修改每個listen指令以包括http2:

/etc/nginx/sites-enabled/your_domain 

  1. ...  
  2.     listen [::]:443 ssl http2 ipv6only=on;  
  3.     listen 443 ssl http2;  
  4. ... 

這告訴 Nginx 在支持的瀏覽器中使用 HTTP/2。

保存配置文件并退出文本編輯器。如果您使用的是,請?jiān)诔霈F(xiàn)提示時nano按Ctrl+Xthen,Y然后按 Enter。

每當(dāng)您對 Nginx 配置文件進(jìn)行更改時,您都應(yīng)該使用-t運(yùn)行 Nginx 內(nèi)置語法檢查命令的標(biāo)志來檢查配置是否存在錯誤:

  •  sudo nginx -t

如果語法沒有錯誤,您將收到如下輸出:

sudo nginx -t 的輸出 

  1. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
  2. nginx: configuration file /etc/nginx/nginx.conf test is successful 

接下來,您將配置 Nginx 服務(wù)器以使用更嚴(yán)格的密碼列表來提高服務(wù)器的安全性。

步驟 2 — 刪除舊的和不安全的密碼套件

HTTP/2 有一個應(yīng)該避免的舊的和不安全的密碼的阻止列表。密碼套件是描述傳輸數(shù)據(jù)應(yīng)如何加密的加密算法。

您將用于定義密碼的方法取決于您為 Nginx 配置 TLS/SSL 證書的方式。

如果您使用 Certbot 獲取證書,它還會創(chuàng)建/etc/letsencrypt/options-ssl-nginx.conf包含對 HTTP/2 不夠安全的密碼的文件。但是,修改此文件將阻止 Certbot 將來應(yīng)用更新,因此我們只會告訴 Nginx 不要使用此文件,我們將指定我們自己的密碼列表。

打開您的域的服務(wù)器塊配置文件: 

  1. sudo nano /etc/nginx/sites-enabled/your_domain 

找到包含該options-ssl-nginx.conf文件的行并通過#在該行的開頭添加一個字符來將其注釋掉:

/etc/nginx/sites-enabled/your_domain 

  1. # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot<^> 

在該行下方,添加此行以定義允許的密碼:

/etc/nginx/sites-enabled/your_domain 

  1. ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; 

保存文件并退出編輯器。

如果您使用自簽名證書或使用第三方證書并根據(jù)先決條件對其進(jìn)行配置,請/etc/nginx/snippets/ssl-params.conf在文本編輯器中打開該文件:

  •  sudo nano /etc/nginx/snippets/ssl-params.conf

找到以下行:

/etc/nginx/snippets/ssl-params.conf 

  1. ...  
  2. ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;  
  3. ... 

修改它以使用以下密碼列表:

/etc/nginx/snippets/ssl-params.conf 

  1. ...  
  2. ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;  

保存文件并退出編輯器。

再次使用以下nginx -t命令檢查配置是否存在語法錯誤:

  •  sudo nginx -t

如果您遇到任何錯誤,請解決它們并再次測試。

一旦您的配置通過語法檢查,請使用以下systemctl命令重新啟動 Nginx :

  •  sudo systemctl reload nginx.service

重新啟動服務(wù)器后,讓我們驗(yàn)證它是否有效。

步驟 3 — 驗(yàn)證 HTTP/2 是否已啟用

讓我們確保服務(wù)器正在運(yùn)行并使用 HTTP/2。

使用該curl命令向您的站點(diǎn)發(fā)出請求并查看標(biāo)頭:

  •  curl -I -L --http2 https://your_domain

您將收到如下輸出: 

  1. HTTP/2 200  
  2. server: nginx/1.18.0 (Ubuntu)  
  3. date: Wed, 10 Nov 2021 17:53:10 GMT  
  4. content-type: text/html  
  5. content-length: 612  
  6. last-modified: Tue, 09 Nov 2021 23:18:37 GMT  
  7. etag: "618b01cd-264"  
  8. accept-ranges: bytes 

您還可以驗(yàn)證 HTTP/2 是否在 Google Chrome 中使用。打開 Chrome 并導(dǎo)航到. 打開 Chrome 開發(fā)人員工具(查看->開發(fā)人員->開發(fā)人員工具)并重新加載頁面(查看->重新加載此頁面)。導(dǎo)航到Network選項(xiàng)卡,右鍵單擊以Name開頭的表標(biāo)題行,然后從彈出菜單中選擇Protocol選項(xiàng)。https://your_domain

您將擁有一個包含(代表 HTTP/2)的新協(xié)議列h2,表明 HTTP/2 正在運(yùn)行。

此時,您已準(zhǔn)備好通過 HTTP/2 協(xié)議提供內(nèi)容。讓我們通過啟用 HSTS 來提高安全性和性能。

步驟 4  - 啟用 HTTP 嚴(yán)格傳輸安全 (HSTS)

即使您的 HTTP 請求重定向到 HTTPS,您也可以啟用HTTP 嚴(yán)格傳輸安全(HSTS) 以避免必須執(zhí)行這些重定向。如果瀏覽器找到 HSTS 標(biāo)頭,它不會在給定的時間段內(nèi)再次嘗試通過常規(guī) HTTP 連接到服務(wù)器。無論如何,它將僅使用加密的 HTTPS 連接來交換數(shù)據(jù)。此標(biāo)頭還保護(hù)我們免受協(xié)議降級攻擊。

再次打開您的域的服務(wù)器塊配置文件: 

  1. sudo nano /etc/nginx/your_domain 

將此行添加到包含 SSL 密碼的文件的同一塊以啟用 HSTS:

/etc/nginx/your_domain 

  1. server {  
  2. ...  
  3.     ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;  
  4.     add_header Strict-Transport-Security "max-age=15768000" always;  
  5.  
  6. ... 

在max-age以秒為單位設(shè)定。該值15768000相當(dāng)于 6 個月。

默認(rèn)情況下,此標(biāo)頭不會添加到子域請求中。如果您有子域并希望 HSTS 應(yīng)用于所有子域,則應(yīng)includeSubDomains在行尾添加變量,如下所示:

/etc/nginx/your_domain 

  1. add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always; 

保存文件,然后退出編輯器。

再次檢查配置是否有語法錯誤:

  •  sudo nginx -t

最后,重新啟動 Nginx 服務(wù)器以應(yīng)用更改。

sudo systemctl reload nginx.service

結(jié)論

您的 Nginx 服務(wù)器現(xiàn)在正在為 HTTP/2 頁面提供服務(wù)。如果您想測試 SSL 連接的強(qiáng)度,請?jiān)L問Qualys SSL 實(shí)驗(yàn)室并針對您的服務(wù)器運(yùn)行測試。如果一切配置正確,您應(yīng)該獲得 A+ 標(biāo)記以確保安全。 

 

責(zé)任編輯:龐桂玉 來源: Linux公社
相關(guān)推薦

2017-03-02 09:40:28

UbuntuCentOSNginx

2021-12-20 10:00:41

Let's EncryNginxLinux

2022-05-29 17:37:39

LinuxUbuntuPHP

2020-07-14 20:25:46

UbuntuLinux桌面應(yīng)用

2020-08-14 07:00:00

RudderIT工具

2022-03-17 14:56:26

KubernetesMinikubeLinux

2021-09-18 08:00:00

Python系統(tǒng)開發(fā)

2023-05-27 16:27:25

2020-10-17 13:04:35

UbuntuDeepin桌面環(huán)境

2022-09-01 08:37:50

Ubuntu發(fā)行版

2021-01-21 10:21:11

NginxHTTP 3.0Linux

2021-12-16 16:50:47

NginxSSLLinux

2019-08-13 16:10:38

UbuntuLinux時間同步

2022-05-29 10:28:56

Ubuntusudo 密碼桌面環(huán)境

2021-07-20 08:00:00

集群Elasticsear工具

2017-05-10 09:40:57

Ubuntupm2Nginx

2020-06-15 18:40:15

Ubuntu 20.0文件夾顏色Ubuntu

2019-08-02 15:30:42

UbuntuMongoDB命令

2022-06-14 09:33:15

LinuxGNU Emacs命令

2019-08-22 10:20:41

Ubuntu設(shè)置語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號