<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è)措施!效果明顯~

          共 4215字,需瀏覽 9分鐘

           ·

          2021-11-27 07:43


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

          這看起來像是不是有些夸大其詞呢?但是,在?2020?年的前幾個(gè)月里面,擊垮了人們關(guān)于世界,什么是正常和合理的定義。由于?COVID?19?的大流行,地球上將近一半的人被困在家中,互聯(lián)網(wǎng)已成為他們交流、娛樂、購買食物、工作和教育的唯一方式。每一周,互聯(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í),我們就需要通過優(yōu)化網(wǎng)站,對(duì)?HTTP?服務(wù)器進(jìn)行一些小的改動(dòng),可以減少用戶使用的網(wǎng)絡(luò)帶寬和服務(wù)器上的負(fù)載,就可以給更多用戶提供服務(wù)。這里,我們將介紹一些簡單但功能強(qiáng)大的配置更改,這些改動(dòng)操作步驟非常簡單,但可以明顯提高網(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ù)訪問者,每個(gè)用戶在一個(gè)會(huì)話中平均訪問?4?個(gè)頁面。


          1、啟用 Gzip 壓縮

          Enabling Gzip Compression for HTML, CSS, and JavaScript Files

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

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

          默認(rèn)情況下,壓縮功能在?Nginx?中是禁用的,但因?yàn)榘惭b方式或?Linux?發(fā)行版的不同,一些情況下可能在默認(rèn)的?nginx.conf?配置文件中是啟用狀態(tài)。這里,我們?cè)?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ì)來減少了約?80%?數(shù)據(jù)傳輸!對(duì)于頁面上的每個(gè)新用戶,您可以節(jié)省大約?917KB?的數(shù)據(jù)傳輸。對(duì)于長期使用我們網(wǎng)站的用戶,每天可以節(jié)省?62MB?帶寬,每月可以節(jié)省?1860MB?帶寬。

          ?2、設(shè)置緩存頭

          Setting Cache Headers

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

          首先,可以為字體和圖像設(shè)置較長的緩存過期時(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)頁的下一代協(xié)議,旨在更好地利用網(wǎng)絡(luò)和主機(jī)服務(wù)器。根據(jù)Google 文檔,它可以更快地加載頁面內(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)求。通過減少不必要的日志記錄,可以節(jié)省服務(wù)器上的磁盤存儲(chǔ)、CPU?和?I/O?操作。這不僅可以讓我們服務(wù)器更快一些,而且釋放的資源可以用來運(yùn)行其他服務(wù)。

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

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

          如果我們不需要記錄檢索普通頁面資源的請(qǐng)求,比如圖像文件、JavaScript?文件和?CSS?文件等等,那么這是一個(gè)快速而簡單的解決方案。你所需要做的就是創(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?官方文檔中的示例,讓我們打開條件日志記錄。創(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)求,也可以通過打開訪問日志緩沖來最大程度地減少?I/O?操作。使用此指令,Nginx?將等待將日志數(shù)據(jù)寫入磁盤,直到填滿?512KB?緩沖區(qū)或自上次刷新以來已過了?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?指令來限制特定?URL?的帶寬。在這里,我們將?/download?下每個(gè)文件的傳輸速率限制為每秒?50KB?的速度。

          location /download/ {
          limit_rate 50k;
          }

          你可能還希望僅對(duì)較大的文件進(jìn)行速率限制,這可以通過?limit_rate_after?指令進(jìn)行。在此示例中,每個(gè)文件(來自任何目錄)的前?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)不要阻止用戶使用下載管理器來繞開速率限制。


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

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

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

          轉(zhuǎn)載:https://www.escapelife.site/posts/ebc52dd5.html

          文章轉(zhuǎn)自:DevOps技術(shù)棧

          Linux學(xué)習(xí)指南

          有收獲,點(diǎn)個(gè)在看?

          瀏覽 76
          點(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>
                  精品天天干 | 99热在线精品免费 | 亚洲人成色777777无码 | 亚洲最大的黄色网址 | 日韩一级电影在线 |