<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          加速 Nginx 響應(yīng)的 5 個(gè)措施!效果明顯~

          共 4887字,需瀏覽 10分鐘

           ·

          2021-07-03 14:09

          點(diǎn)擊“程序員面試吧”,選擇“星標(biāo)??”

          下拉至文末”查看更多

          海軍上將威廉·麥克拉文在 2014 年于德克薩斯大學(xué)發(fā)表的著名演講中說(shuō),如果你想改變世界,就從鋪床開(kāi)始吧!有時(shí),一些很小的事情可能會(huì)產(chǎn)生很大的影響,無(wú)論你是早上起來(lái)整理你的床鋪,還是對(duì)網(wǎng)站的 HTTP 服務(wù)配置文件做一些小小的改變。

          這看起來(lái)像是不是有些夸大其詞呢?但是,在 2020 年的前幾個(gè)月里面,擊垮了人們關(guān)于世界,什么是正常和合理的定義。由于 COVID?19 的大流行,地球上將近一半的人被困在家中,互聯(lián)網(wǎng)已成為他們交流、娛樂(lè)、購(gòu)買食物、工作和教育的唯一方式。每一周,互聯(lián)網(wǎng)的網(wǎng)絡(luò)流量和服務(wù)器負(fù)載都比以往任何時(shí)候都要高。根據(jù) BroadbandNow 公司 3 月 25 日發(fā)布的報(bào)告顯示,很多城市已經(jīng)出現(xiàn)一定程度的網(wǎng)絡(luò)退化。

          這時(shí),我們就需要通過(guò)優(yōu)化網(wǎng)站,對(duì) HTTP 服務(wù)器進(jìn)行一些小的改動(dòng),可以減少用戶使用的網(wǎng)絡(luò)帶寬和服務(wù)器上的負(fù)載,就可以給更多用戶提供服務(wù)。這里,我們將介紹一些簡(jiǎn)單但功能強(qiáng)大的配置更改,這些改動(dòng)操作步驟非常簡(jiǎn)單,但可以明顯提高網(wǎng)站性能并減少使用的網(wǎng)絡(luò)帶寬。

          舉一個(gè)現(xiàn)實(shí)存在的例子,我們有一個(gè)電子商務(wù)的站點(diǎn),該站點(diǎn)運(yùn)行著 Nginx1.15.9 作為其 web 服務(wù)器。為了便于計(jì)算,我們假設(shè)該站點(diǎn)每天有 100 個(gè)獨(dú)立用戶,30% 的用戶是重復(fù)訪問(wèn)者,每個(gè)用戶在一個(gè)會(huì)話中平均訪問(wèn) 4 個(gè)頁(yè)面。


          1、啟用 Gzip 壓縮

          Enabling Gzip Compression for HTML, CSS, and JavaScript Files

          如您所知,在網(wǎng)站上構(gòu)建頁(yè)面的 HTML,CSS 和 JavaScript 文件可能非常龐大。在大多數(shù)情況下,Web 服務(wù)器可以即時(shí)壓縮這些和其他文本文件,以節(jié)省網(wǎng)絡(luò)帶寬。查看 Web 服務(wù)器是否正在壓縮文件的一種方法,就是使用瀏覽器中的開(kāi)發(fā)人員工具。

          對(duì)于許多瀏覽器,您可以使用 F12 鍵訪問(wèn)該工具,相關(guān)信息在 Network 選項(xiàng)卡上,可以得到如下所示的截圖例子。正如您在左下角看到的,沒(méi)有壓縮:文本文件的大小為 1.15 MB,傳輸了大量數(shù)據(jù)。

          默認(rèn)情況下,壓縮功能在 Nginx 中是禁用的,但因?yàn)榘惭b方式或 Linux 發(fā)行版的不同,一些情況下可能在默認(rèn)的 nginx.conf 配置文件中是啟用狀態(tài)。這里,我們?cè)?nbsp;NGINX 配置文件中啟用了 gzip 壓縮:

          gzip on;
          gzip_types application/xml
          application/json
          text/css
          text/javascript
          application/javascript;
          gzip_vary on;
          gzip_comp_level 6;
          gzip_min_length 500;

          正如下面屏幕截圖中看到的那樣,壓縮后數(shù)據(jù)傳輸減少到 260KB,相對(duì)來(lái)收減少了約 80% 數(shù)據(jù)傳輸!對(duì)于頁(yè)面上的每個(gè)新用戶,您可以節(jié)省大約 917KB 的數(shù)據(jù)傳輸。對(duì)于長(zhǎng)期使用我們網(wǎng)站的用戶,每天可以節(jié)省 62MB 帶寬,每月可以節(jié)省 1860MB 帶寬。

           2、設(shè)置緩存頭

          Setting Cache Headers

          瀏覽器檢索網(wǎng)頁(yè)文件時(shí),會(huì)將副本保留在本地磁盤緩存中。這樣,當(dāng)你再次訪問(wèn)該頁(yè)面時(shí),瀏覽器就不必從服務(wù)器重新獲取文件。每個(gè)瀏覽器都有自己的使用邏輯,來(lái)決定何時(shí)使用該文件對(duì)應(yīng)的本地副本,以及何時(shí)在服務(wù)器更改了該文件時(shí)再次獲取它。但是,作為網(wǎng)站所有者,你可以在發(fā)送的 HTTP 響應(yīng)中設(shè)置緩存控制和過(guò)期標(biāo)頭,以提高瀏覽器的緩存行為的效率,從而減少很多不必要的 HTTP 請(qǐng)求。

          首先,可以為字體和圖像設(shè)置較長(zhǎng)的緩存過(guò)期時(shí)間,這些字體和圖像可能不會(huì)經(jīng)常更改。在下面的示例中,設(shè)置客戶端瀏覽器將字體和圖像在本地緩存中保留一個(gè)月。

          location ~* \.(?:jpg|jpeg|gif|png|ico|woff2)$ {
          expires 1M;
          add_header Cache-Control "public";
          }

           3、啟用 HTTP2 協(xié)議

          Enabling HTTP/2 Protocol Support

          HTTP/2 是用于服務(wù)網(wǎng)頁(yè)的下一代協(xié)議,旨在更好地利用網(wǎng)絡(luò)和主機(jī)服務(wù)器。根據(jù)Google 文檔,它可以更快地加載頁(yè)面內(nèi)容和處理請(qǐng)求。

          The resulting protocol is more friendly to the network, because fewer TCP
          connections are used in comparison to HTTP/1.x. This means less competition
          with other flows, and longer?lived connections, which in turn leads to better
          utilization of available network capacity.

          在 Nginx1.9.5 及更高版本中已經(jīng)支持了 HTTP/2 協(xié)議,如果需要使用或啟用 HTTP/2 協(xié)議的話,在 Nginx 配置文件的 listen 指令上包含 http2 參數(shù),即可。需要請(qǐng)注意的是,在大多數(shù)情況下,還需要啟用 TLS 才能正常使用 HTTP/2 協(xié)議。

          listen 443 ssl http2;

          下面這網(wǎng)站可以驗(yàn)證自己管理的網(wǎng)站是否支持 HTTP/2 的協(xié)議。

           

          4、優(yōu)化日志

          Optimizing Logging

          我們?cè)诠芾砭W(wǎng)站的時(shí)候,即使是有對(duì)應(yīng)的監(jiān)控服務(wù),但是對(duì)應(yīng)日志分析還是不夠到位。你也可能只關(guān)注錯(cuò)誤(400 和 500 個(gè)狀態(tài)碼等等),而不是成功的請(qǐng)求。通過(guò)減少不必要的日志記錄,可以節(jié)省服務(wù)器上的磁盤存儲(chǔ)、CPU 和 I/O 操作。這不僅可以讓我們服務(wù)器更快一些,而且釋放的資源可以用來(lái)運(yùn)行其他服務(wù)。

          有幾種不同的方法可以減少和優(yōu)化日志記錄,但是在這里,我們重點(diǎn)介紹三個(gè)。

          • [1] 禁用頁(yè)面資源請(qǐng)求的日志記錄

          如果我們不需要記錄檢索普通頁(yè)面資源的請(qǐng)求,比如圖像文件、JavaScript 文件和 CSS 文件等等,那么這是一個(gè)快速而簡(jiǎn)單的解決方案。你所需要做的就是創(chuàng)建一個(gè)與這些文件類型匹配的 location 塊,并配置禁用其中的日志記錄。

          location ~* \.(?:jpg|jpeg|gif|png|ico|woff2|js|css)$ {
          access_log off;
          }
          • [2] 禁用成功請(qǐng)求的日志記錄

          這是一種更好的方法,因?yàn)樗鼤?huì)丟棄帶有 2xx 或 3xx 的響應(yīng)查詢,僅記錄錯(cuò)誤請(qǐng)求。它比方法 1 稍微復(fù)雜一點(diǎn),因?yàn)樗Q于您的 Nginx 日志記錄的配置方式。

          使用 Nginx 官方文檔中的示例,讓我們打開(kāi)條件日志記錄。創(chuàng)建一個(gè) $loggable 的變量并將其設(shè)置為 0,用于帶有 2xx 和 3xx 響應(yīng)代碼的日志請(qǐng)求,否則設(shè)置為 1,即可。然后在 access_log 指令中,將該變量作為條件引用。

          # /etc/nginx/nginx.conf
          access_log /var/log/nginx/access.log;
          # access_log directive
          map $status $loggable {
          ~^[23] 0;
          default 1;
          }

          access_log /var/log/nginx/access.log combined if=$loggable;
          • [3] 最小化 I/O 操作

          即使你要記錄所有請(qǐng)求,也可以通過(guò)打開(kāi)訪問(wèn)日志緩沖來(lái)最大程度地減少 I/O 操作。使用此指令,Nginx 將等待將日志數(shù)據(jù)寫入磁盤,直到填滿 512KB 緩沖區(qū)或自上次刷新以來(lái)已過(guò)了 1 分鐘(以先發(fā)生者為準(zhǔn))。

          access_log /var/log/nginx/access.log combined buffer=512k flush=1m;

           5、限制帶寬

          Limiting Bandwidth for Particular URLs

          如果服務(wù)器提供較大的文件(或較小但非常受歡迎的文件,例如表單或報(bào)表文件等),則設(shè)置客戶端下載文件的最大速度可能是一個(gè)非常有用的選擇。如果你的站點(diǎn)已經(jīng)承受了很高的網(wǎng)絡(luò)負(fù)載,則限制下載速度會(huì)留下更多帶寬,以使應(yīng)用程序的關(guān)鍵部分保持響應(yīng),這是硬件制造商使用的非常受歡迎的解決方案。

          使用 limit_rate 指令來(lái)限制特定 URL 的帶寬。在這里,我們將 /download 下每個(gè)文件的傳輸速率限制為每秒 50KB 的速度。

          location /download/ {
          limit_rate 50k;
          }

          你可能還希望僅對(duì)較大的文件進(jìn)行速率限制,這可以通過(guò) limit_rate_after 指令進(jìn)行。在此示例中,每個(gè)文件(來(lái)自任何目錄)的前 500KB 都不受速度限制地進(jìn)行傳輸,之后的所有內(nèi)容均以 50KB/s 的速度為上限。這樣可以加快網(wǎng)站關(guān)鍵部分的交付速度,同時(shí)降低其他部分的速度。

          location / {
          limit_rate_after 500k;
          limit_rate 50k;
          }

          請(qǐng)注意,速率限制適用于瀏覽器和 Nginx 之間的單個(gè) HTTP 連接,因此請(qǐng)不要阻止用戶使用下載管理器來(lái)繞開(kāi)速率限制。


          翻譯自:《Help the World by Healing Your NGINX Configuration》

          我們希望這五個(gè)技巧能幫助你優(yōu)化網(wǎng)站的性能,然而速度和帶寬增益因網(wǎng)站而異。即使調(diào)整你的服務(wù) Nginx 配置,發(fā)現(xiàn)似乎并沒(méi)有顯著釋放帶寬或提高速度,但成千上萬(wàn)個(gè)網(wǎng)站分別調(diào)整其 Nginx 配置的整體影響加在一起呢?我們的全球網(wǎng)絡(luò)得到更有效的利用,這意味著最關(guān)鍵的服務(wù)將在需要時(shí)提供。

          哈哈哈,當(dāng)然我們還可以使用 F5 等負(fù)載均衡器。




          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲热免费视频 | 欧美天堂在线 | 2014天堂网 | 人人操在线播放 | 另类TS人妖一区二区三区 |