日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx静态资源优化配置方法

發(fā)布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx静态资源优化配置方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Nginx對靜態(tài)資源如何進行優(yōu)化配置。這里從三個屬性配置進行優(yōu)化:

sendfile on; tcp_nopush on; tcp_nodeplay on;

sendfile

sendfile,用來開啟高效的文件傳輸模式。sendfile系統(tǒng)調(diào)用在兩個文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作),從而避免了數(shù)據(jù)在內(nèi)核緩沖區(qū)和用戶緩沖區(qū)之間的拷貝,操作效率很高,被稱之為零拷貝。

語法sendfile on | off
默認值sendfile off;
位置http,server,location

請求靜態(tài)資源的過程:客戶端通過網(wǎng)絡接口向服務端發(fā)送請求,操作系統(tǒng)將這些客戶端的請求傳遞給服務器端應用程序,服務器端應用程序會處理這些請求,請求處理完成以后,操作系統(tǒng)還需要將處理得到的結(jié)果通過網(wǎng)絡適配器(網(wǎng)卡)傳遞回去。

原理解釋:

read/write:

在傳統(tǒng)的文件傳輸方式(read、write/send方式),具體流程細節(jié)如下:

  • 調(diào)用read函數(shù),文件數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū)
  • read函數(shù)返回,數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū)
  • 調(diào)用write/send函數(shù),將數(shù)據(jù)從用戶緩沖區(qū)拷貝到內(nèi)核socket緩沖區(qū)
  • 數(shù)據(jù)從內(nèi)核socket緩沖區(qū)拷貝到協(xié)議引擎中
  • 在這個過程當中,文件數(shù)據(jù)實際上是經(jīng)過了四次拷貝操作:
    硬盤—>內(nèi)核緩沖區(qū)—>用戶緩沖區(qū)—>內(nèi)核socket緩沖區(qū)—>協(xié)議引擎

    sendfile:

    sendfile系統(tǒng)調(diào)用則提供了一種減少拷貝次數(shù),提升文件傳輸性能的方法。

  • sendfile系統(tǒng)調(diào)用利用DMA引擎將文件數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),之后數(shù)據(jù)被拷貝到內(nèi)核socket緩沖區(qū)中
  • DMA引擎將數(shù)據(jù)從內(nèi)核socket緩沖區(qū)拷貝到協(xié)議引擎中
  • 這里沒有用戶態(tài)和內(nèi)核態(tài)之間的切換,也沒有內(nèi)核緩沖區(qū)和用戶緩沖區(qū)之間的拷貝,大大提升了傳輸性能。
    這個過程數(shù)據(jù)經(jīng)歷的拷貝操作如下:
    硬盤—>內(nèi)核緩沖區(qū)—>內(nèi)核socket緩沖區(qū)—>協(xié)議引擎

    帶有DMA收集拷貝功能的sendfile

    對于帶有DMA收集拷貝功能的sendfile系統(tǒng)調(diào)用,還可以再減少一次內(nèi)核緩沖區(qū)之間的拷貝。具體流程如下:

  • sendfile系統(tǒng)調(diào)用利用DMA引擎將文件數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),之后,將帶有文件位置和長度信息的緩沖區(qū)描述符添加到內(nèi)核socket緩沖區(qū)中
  • DMA引擎會將數(shù)據(jù)直接從內(nèi)核緩沖區(qū)拷貝到協(xié)議引擎中
  • 這個過程數(shù)據(jù)經(jīng)歷的拷貝操作如下:
    硬盤—>內(nèi)核緩沖區(qū)—>協(xié)議引擎

    tcp_nopush

    tcp_nopush:該指令必須在sendfifile打開的狀態(tài)下才會生效,主要是用來提升網(wǎng)絡包的傳輸’效率’

    語法tcp_nopush on | off;
    默認值tcp_nopush off;
    位置http,server,location

    語法tcp_nppush的含義,當有數(shù)據(jù)時,先別著急發(fā)送,確保數(shù)據(jù)包已經(jīng)裝滿數(shù)據(jù),避免了網(wǎng)絡擁塞。他可以配置一次發(fā)送數(shù)據(jù)的包大小。也就是說,它不是按時間累計0.2秒后發(fā)送包,而是當包累計到一定大小后就發(fā)送。

    當使用sendfile函數(shù)時,tcp_nopush才起作用,它和指令tco_nodelay是互斥的。tcp_cork是linux下tcp/ip傳輸?shù)囊粋€標準了,這個標準的大概的意思是,一般情況下,在tcp交互的過程中,當應用程序接收到數(shù)據(jù)包后馬上傳送出去,不等待,而tcp_cork選項是數(shù)據(jù)包不會馬上傳送出去,等到數(shù)據(jù)包最大時,一次性的傳輸出去,這樣有助于解決網(wǎng)絡堵塞,已經(jīng)是默認了。

    也就是說tcp_nopush = on 會設(shè)置調(diào)用tcp_cork方法,這個也是默認的,結(jié)果就是數(shù)據(jù)包不會馬上傳送出去,等到數(shù)據(jù)包最大時,一次性的傳輸出去,這樣有助于解決網(wǎng)絡堵塞。

    對于nginx配置文件中的tcp_nopush,默認就是tcp_nopush,不需要特別指定,這個選項對于www,ftp等大文件很有幫助

    tcp_nodelay

    tcp_nodelay:該指令必須在keep-alive連接開啟的情況下才生效,來提高網(wǎng)絡包傳輸?shù)摹瘜崟r性’.

    你怎么可以強制 socket 在它的緩沖區(qū)里發(fā)送數(shù)據(jù)?
    一個解決方案是 TCP 堆棧的 TCP_NODELAY選項。這樣就可以使緩沖區(qū)中的數(shù)據(jù)立即發(fā)送出去。

    Nginx的 TCP_NODELAY 選項使得在打開一個新的 socket 時增加了TCP_NODELAY選項。但這時會造成一種情況:
    終端應用程序每產(chǎn)生一次操作就會發(fā)送一個包,而典型情況下一個包會擁有一個字節(jié)的數(shù)據(jù)以及40個字節(jié)長的包頭,于是產(chǎn)生4000%的過載,很輕易地就能令網(wǎng)絡發(fā)生擁塞。為了避免這種情況,TCP堆棧實現(xiàn)了等待數(shù)據(jù) 0.2秒鐘,因此操作后它不會發(fā)送一個數(shù)據(jù)包,而是將這段時間內(nèi)的數(shù)據(jù)打成一個大的包。這一機制是由Nagle算法保證。

    語法tcp_nodelay on | off;
    默認值tcp_nodelay on;
    位置http,server,location

    在平時使用的時候可以將兩個值都打開。“tcp_nopush"和”tcp_nodelay“是"互斥的”,那么為什么要將這兩個值都打開,這個大家需要知道的是在linux2.5.9以后的版本中兩者是可以兼容的,三個指令都開啟的好處是,sendfifile可以開啟高效的文件傳輸模式,tcp_nopush開啟可以確保在發(fā)送到客戶端之前數(shù)據(jù)包已經(jīng)充分“填滿”, 這大大減少了網(wǎng)絡開銷,并加快了文件發(fā)送的速度。 然后,當它到達最后一個可能因為沒有“填滿”而暫停的數(shù)據(jù)包時,Nginx會忽略tcp_nopush參數(shù), 然后,tcp_nodelay強制套接字發(fā)送數(shù)據(jù)。由此可知,TCP_NOPUSH可以與TCP_NODELAY一起設(shè)置,它比單獨配置TCP_NODELAY具有更強的性能。所以我們可以使用如下配置來優(yōu)化Nginx靜態(tài)資源的處理

    sendfile on; tcp_nopush on; tcp_nodelay on;

    參數(shù)sendfile on 用于開啟文件高效傳輸模式,同時將tcp_nopush on 和tcp_nodelay on 兩個指令設(shè)置為on,可防止網(wǎng)絡及磁盤I/O阻塞,提升Nginx工作效率。

    總結(jié)

    以上是生活随笔為你收集整理的nginx静态资源优化配置方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。