Nginx 基礎概念

Nginx 基礎概念

日期:20181117

        個人小站: www.winthcloud.top


目錄

http協議基本概念

資源加速

http MPM (Multiple Process Module)

I/O類型(synchronous, asyncronous, blocking, nonblocking)

I/O模型(重點)

同步阻塞IO模型

同步非阻塞IO模型

I/O多路複用模型

信號驅動IO模型 signal-driven

異步IO 

I/O模型的具體實現

select/poll/epoll

Nginx介紹

nginx的程序架構

nginx模塊

nginx的功用

nginx配置

正常運行必備的配置

性能優化相關的配置

事件驅動相關的配置

調試和定位問題log,daemon

ngx_http_core_module模塊相關配置

與套接字相關的配置: 

server

listen

server_name

tcp_nodelay

sendfile

server_token

定義路徑相關的配置: 

location

root

alias

index

error_page

try_files

定義客戶端請求的相關配置: 

keepalive_{timeout,requests,disable}, 

send_timeout

client_body_buffer_size

client_body_temp_path

對客戶端進行限制的相關配置: 

limit_rate

limit_except 

文件操作優化的配置: 

aio

directio

open_file_cache

open_file_cache_errors

open_file_cache_min_uses

open_file_cache_valid


Nginx (web server, web reverse proxy)http協議基本概念


http protocal: 80/tcp, HyperText Transfer Protocal

html: HyperText Mark Language

文本: HTTP:/1.1, MIME


MIME Multipurpose Internet Mail Extension

major/minor

text/plain

image/jpeg


URI Uniform Resorce Identifier

URL Uniform Resource Locator

URL scheme://server[:port]/path/source


http事務 request <--> response

request:

<method> <URL> <version>

<HEAD>


<BODY>


response:

<version> <status> <reason phrase>

<HEADERS>


<BODY>


協議格式: 文本,二進制


method:

GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS


status:

1XX 信息類

2XX 成功類200

3XX 重定向類

4XX 客戶端錯誤

5XX 服務端錯誤


HEADER

通用首部

請求首部

響應首部

實體首部

擴展首部


PV: page view

UV: user view


資源加速

瀏覽器限制打開的線程是基於單個域名的,如某瀏覽器對域名可請求的線程數限制是4,如果請求

某個單個頁面時,該頁面裏如果2個其它域名它可以同時啓動12個線程去加載頁面


http MPM (Multiple Process Module)

prefork, worker, event

prefork: 主進程,生成多個子進程,每個子進程處理一個請求

worker: 主進程,生成多個子進程,每個子進程生成多個線程,每個線程響應一個請求

event: 主進程,生成多個子進程,每個子進程響應多個請求


I/O類型(synchronous, asyncronous)

同步和異步synchronous, asyncronous

關注的是消息通知機制


同步:調用發出之後不會立即返回,但一旦返回,則返回即是最終結果

異步:調用發出之後,被調用方立即返回消息,但返回的並非最終結果,被調用者通過

狀態、通知機制來通知調用者,或通過回調函數來處理結果


阻塞和非阻塞 block, nonblock

關注的是調用者等待被調用者返回調用結果時的狀態


阻塞:調用結果返回之前,調用者會被掛起,調用者只有在得到返回結果之後才能繼續操作

非阻塞: 調用者在結果返回之前,不會被掛起,即調用不會阻塞調用者的其它操作 



I/O模型(重點)

blocking IO

nonblocking IO


IO multiplexing 複用

進程將IO調用交由以下的系統調用來完成從磁盤加載文件至內核

select()

poll()

有限制最多同時接受1024個併發調用

prefork和worker就是使用此種模型,如果阻塞型進程則阻塞在調用select()之上

但是其第二段將數據由內核空間複製到內核空間的階段還是阻塞的

雖然看似阻塞但是select()由於是個代理幫進程去調用真正處理將硬盤文件加載至內核

空間的系統調用,在此期間它還可以接收其它進程的io調用請求


signal driven

sigIO 

此種IO模型在其第一段將IO請求的數據由磁盤加載至內核空間的這段時間裏,進程

可以再次接收其它請求,但在第二段由內核空間複製數據至進程空間時,此段是阻塞

的無法再處理其它請求

通知

水平觸發 多次通知進程取數據

邊緣觸發 只通知一次


asynchronous IO

sigIO的升級,兩個階段都解放,即進程發送IO請求後就可以再次接收其它請求,兩個階

段的處理完成後會給進程發送信號,進程直接可以去指定的內存空間取數據進行操作


模型由上至下,其編程的難度逐步增強


Nginx最被設計時用的就是事件驅動式IO,而且使用邊緣觸發機制,並且還支持異步

IO,和mmaping機制,設計之初就是做高併發的處理能力的web應用服務器程序


同步/異步:關注的是消息通信機制

同步:synchronous,調用者等待被調用者返回消息,才能繼續執行

異步:asynchronous,被調用者通過狀態、通知或回調機制主動通知調用者被調用者

的運行狀態

阻塞/非阻塞:關注調用者在等待結果返回之前所處的狀態

阻塞:blocking,指IO操作需要徹底完成後才返回到用戶空間,調用結果返回之前,

調用者被掛起

非阻塞:nonblocking,指IO操作被調用後立即返回給用戶一個狀態值,無需等到IO操

作徹底完成,最終的調用結果返回之前,調用者不會被掛起

I/O模型:

阻塞型、非阻塞型、複用型、信號驅動型、異步



同步阻塞IO模型

同步阻塞IO模型是最簡單的IO模型,用戶線程在內核進行IO操作時被阻塞

用戶線程通過系統調用read發起IO讀操作,由用戶空間轉到內核空間。內核等到數據包

到達後,然後將接收的數據拷貝到用戶空間,完成read操作

用戶需要等待read將數據讀取到buffer後,才繼續處理接收的數據。整個IO請求的過

程中,用戶線程是被阻塞的,這導致用戶在發起IO請求時,不能做任何事情,對CPU的

資源利用率不夠



同步非阻塞IO模型


用戶線程發起IO請求時立即返回。但並未讀取到任何數據,用戶線程需要不斷地發起IO

請求,直到數據到達後,才真正讀取到數據,繼續執行。即 “輪詢”機制

整個IO請求的過程中,雖然用戶線程每次發起IO請求後可以立即返回,但是爲了等到數

據,仍需要不斷地輪詢、重複請求,消耗了大量的CPU的資源

是比較浪費CPU的方式,一般很少直接使用這種模型,而是在其他IO模型中使用非阻

塞IO這一特性



I/O多路複用模型


IO多路複用是指內核一旦發現進程指定的一個或者多個IO條件準備讀取,就通知該進程

多個連接共用一個等待機制,本模型會阻塞進程,但是進程是阻塞在select或者poll這

兩個系統調用上,而不是阻塞在真正的IO操作上

用戶首先將需要進行IO操作添加到select中,繼續執行做其他的工作(異步),同時等

待select系統調用返回。當數據到達時,IO被激活,select函數返回。用戶線程正式發

起read請求,讀取數據並繼續執行

從流程上來看,使用select函數進行IO請求和同步阻塞模型沒有太大的區別,甚至還多了

添加監視IO,以及調用select函數的額外操作,效率更差。並且阻塞了兩次,但是第一次

阻塞在select上時,select可以監控多個IO上是否已有IO操作準備就緒,即可達到在同

一個線程內同時處理多個IO請求的目的。而不像阻塞IO那種,一次只能監控一個IO

雖然上述方式允許單線程內處理多個IO請求,但是每個IO請求的過程還是阻塞的(在select

函數上阻塞),平均時間甚至比同步阻塞IO模型還要長。如果用戶線程只是註冊自己需要的

IO請求,然後去做自己的事情,等到數據到來時再進行處理,則可以提高CPU的利用率

IO多路複用是最常使用的IO模型,但是其異步程度還不夠“徹底”,因它使用了會阻塞線程

的select系統調用。因此IO多路複用只能稱爲異步阻塞IO模型,而非真正的異步IO



信號驅動IO模型


信號驅動IO:signal-driven I/O

用戶進程可以通過sigaction系統調用註冊一個信號處理程序,然後主程序可以繼續向下

執行,當有IO操作準備就緒時,由內核通知觸發一個SIGIO信號處理程序執行,然後將用

戶進程所需要的數據從內核空間拷貝到用戶空間

此模型的優勢在於等待數據報到達期間進程不被阻塞。用戶主程序可以繼續執行,只要等待

來自信號處理函數的通知



異步IO模型


異步IO與信號驅動IO最主要的區別是信號驅動IO是由內核通知何時可以進行IO操作,而

異步IO則是由內核告訴用戶線程IO操作何時完成。信號驅動IO當內核通知觸發信號處理

程序時,信號處理程序還需要阻塞在從內核空間緩衝區拷貝數據到用戶空間緩衝區這個

階段,而異步IO直接是在第二個階段完成後,內核直接通知用戶線程可以進行後續操作了

相比於IO多路複用模型,異步IO並不十分常用,不少高性能併發服務程序使用IO多路複用

模型+多線程任務處理的架構基本可以滿足需求。目前操作系統對異步IO的支持並非特別完

善,更多的是採用IO多路複用模型模擬異步IO的方式(IO事件觸發時不直接通知用戶線程,

而是將數據讀寫完畢後放到用戶指定的緩衝區中)



I/O模型的具體實現


主要實現方式有以下幾種:

Select:Linux實現對應,I/O複用模型,

BSD4.2最早實現,POSIX標準,一般操作系統均有實現

Poll:Linux實現,對應I/O複用模型,System V unix最早實現

Epoll:Linux特有,對應I/O複用模型,具有信號驅動I/O模型的某些特性

Kqueue:FreeBSD實現,對應I/O複用模型,具有信號驅動I/O模型某些特性

/dev/poll:SUN的Solaris實現,對應I/O複用模型,具有信號驅動I/O模型的某些特性

Iocp Windows實現,對應第5種(異步I/O)模型



select/poll/epoll



Select:POSIX所規定,目前幾乎在所有的平臺上支持,其良好跨平臺支持也是它的一個優

點,本質上是通過設置或者檢查存放fd標誌位的數據結構來進行下一步處理

缺點

單個進程能夠監視的文件描述符的數量存在最大限制,在Linux上一般爲1024,

可以通過修改宏定義FD_SETSIZE,再重新編譯內核實現,但是這樣也會造成效率的降低

單個進程可監視的fd數量被限制,默認是1024,修改此值需要重新編譯內核

對socket是線性掃描,即採用輪詢的方法,效率較低

select 採取了內存拷貝方法來實現內核將 FD 消息通知給用戶空間,這樣一個用

來存放大量fd的數據結構,這樣會使得用戶空間和內核空間在傳遞該結構時複製開銷大



poll

本質上和select沒有區別,它將用戶傳入的數組拷貝到內核空間,然後查詢每個fd對應的

設備狀態

其沒有最大連接數的限制,原因是它是基於鏈表來存儲的

大量的fd的數組被整體複製於用戶態和內核地址空間之間,而不管這樣的複製是不是有意義

poll特點是“水平觸發”,如果報告了fd後,沒有被處理,那麼下次poll時會再次報告該fd

邊緣觸發:只通知一次



epoll:在Linux 2.6內核中提出的select和poll的增強版本

支持水平觸發LT和邊緣觸發ET,最大的特點在於邊緣觸發,它只告訴進程哪些fd剛剛變爲

就需態,並且只會通知一次

使用“事件”的就緒通知方式,通過epoll_ctl註冊fd,一旦該fd就緒,內核就會採用類似

callback的回調機制來激活該fd,epoll_wait便可以收到通知

優點:

沒有最大併發連接的限制:能打開的FD的上限遠大於1024(1G的內存能監聽約10萬個

端口),具體查看/proc/sys/fs/file-max,此值和系統內存大小相關

效率提升:非輪詢的方式,不會隨着FD數目的增加而效率下降;只有活躍可用的FD才

會調用callback函數,即epoll最大的優點就在於它只管理“活躍”的連接,而跟連接

總數無關

內存拷貝,利用mmap(Memory Mapping)

加速與內核空間的消息傳遞;即epoll使用mmap減少複製開銷



Nginx介紹

Nginx:engine X ,2002年,開源,商業版

NGINX是免費,開源,高性能的HTTP和反向代理服務器,郵件代理服務器,通用

TCP/UDP代理服務器

解決C10K問題(10K Connections)

官網:http://nginx.org

二次開發版:

Tengine

OpenResty(章亦春)


特性:

模塊化設計,較好的擴展性

高可靠性

支持熱部署:不停機更新配置文件,升級版本,更換日誌文件

低內存消耗:10000個keep-alive連接模式下的非活動連接,僅需2.5M內存

event-driven,aio, mmap,sendfile

基本功能:

靜態資源的web服務器

http協議反向代理服務器

pop3/imap4協議反向代理服務器

FastCGI(LNMP),uWSGI(python)等協議

模塊化(非DSO),如zip,SSL模塊



nginx的程序架構

web服務相關的功能:

虛擬主機(server)

支持 keep-alive 和管道連接

訪問日誌(支持基於日誌緩衝提高其性能)

url rewirte

路徑別名

基於IP及用戶的訪問控制

支持速率限制及併發數限制

重新配置和在線升級而無須中斷客戶的工作進程

Memcached 的 GET 接口


master/worker結構

一個master進程:

負載加載和分析配置文件、管理worker進程、平滑升級

一個或多個worker進程

處理並響應用戶請求

緩存相關的進程:

cache loader:載入緩存對象

cache manager:管理緩存對象



nginx模塊


nginx高度模塊化,但其模塊早期不支持DSO機制;1.9.11版本支持動態裝載和卸載

模塊分類:

核心模塊:core module

標準模塊:

HTTP 模塊: ngx_http_*

HTTP Core modules 默認功能

HTTP Optional modules 需編譯時指定

Mail 模塊 ngx_mail_*

Stream 模塊 ngx_stream_*

第三方模塊



核心模塊:是 Nginx 服務器正常運行 必不可少 的模塊,提供 錯誤日誌記錄 、 配置文

件解析 、 事件驅動機制 、 進程管理 等核心功能

標準HTTP模塊:提供 HTTP 協議解析相關的功能,比如: 端口配置 、 網頁編碼設置 、

HTTP響應頭設置 等等

可選HTTP模塊:主要用於擴展標準的 HTTP 功能,讓 Nginx 能處理一些特殊的服務,

比如: Flash 多媒體傳輸 、解析 GeoIP 請求、 網絡傳輸壓縮 、 安全協議 SSL 支持等

郵件服務模塊:主要用於支持 Nginx 的 郵件服務 ,包括對 POP3 協議、 IMAP 協議和

SMTP協議的支持

第三方模塊:是爲了擴展 Nginx 服務器應用,完成開發者自定義功能,比如: Json 支持、

Lua 支持等



nginx的功用


靜態的web資源服務器

html,圖片,js,css,txt等靜態資源

結合FastCGI/uWSGI/SCGI等協議反向代理動態資源請求

http/https協議的反向代理

imap4/pop3協議的反向代理

tcp/udp協議的請求轉發(反向代理)



nginx目錄結構和命令


ls /usr/local/nginx/

html是測試頁,sbin是主程序

ls /usr/local/nginx/sbin/

nginx 只有一個程序文件

ls /usr/local/nginx/html/

50x.html index.html 測試網頁

Nginx:默認爲啓動nginx

-h 查看幫助選項

-V 查看版本和配置選項

-t 測試nginx語法錯誤

-c filename 指定配置文件(default: /etc/nginx/nginx.conf)

-s signal 發送信號給master進程,signal:stop, quit, reopen, reload

示例: nginx -s stop 停止nginx

nginx -s reload 加載配置文件

-g directives 在命令行中指明全局指令



nginx配置


配置文件的組成部分:

主配置文件:nginx.conf

子配置文件 include conf.d/*.conf

fastcgi, uwsgi,scgi等協議相關的配置文件

mime.types:支持的mime類型

主配置文件的配置指令:

directive value [value2 ...];

注意:

(1) 指令必須以分號結尾

(2) 支持使用配置變量

內建變量:由Nginx模塊引入,可直接引用

自定義變量:由用戶使用set命令定義

set variable_name value;

引用變量:$variable_name


主配置文件結構:四部

main block:主配置段,即全局配置段,對http,mail都有效

event {

...

} 事件驅動相關的配置

http {

...

} http/https 協議相關配置段

mail {

...

} mail 協議相關配置段

stream {

...

} stream 服務器相關配置段



http協議相關的配置結構

http {

...

... 各server的公共配置

server { 每個server用於定義一個虛擬主機

...

}

server {

...

server_name 虛擬主機名

root 主目錄

alias 路徑別名

location [OPERATOR] URL { 指定URL的特性

...

if CONDITION {

...

}

}

}

}


Main 全局配置段常見的配置指令分類

正常運行必備的配置

優化性能相關的配置

用於調試及定位問題相關的配置

事件驅動相關的配置

幫助文檔

http://nginx.org/en/docs/



正常運行必備的配置

1、user

指定worker進程的運行身份,如組不指定,默認和用戶名同名

Syntax: user user [group];

Default: user nobody nobody;

Context: main

2、pid /PATH/TO/PID_FILE;

指定存儲nginx主進程PID的文件路徑

3、include file | mask;

指明包含進來的其它配置文件片斷

4、load_module file ;

模塊加載配置文件: /usr/share/nginx/modules/*.conf

指明要裝載的動態模塊路徑: /usr/lib64/nginx/modules



性能優化相關的配置:

1、worker_processes number | auto;

worker進程的數量;通常應該爲當前主機的cpu的物理核心數

2、worker_cpu_affinity cpumask ...;

worker_cpu_affinity auto [cpumask] 提高緩存命中率

CPU MASK: 00000001:0號CPU

00000010:1號CPU

10000000:8號CPU

worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity 0101 1010;

3、worker_priority number;

指定worker進程的nice值,設定worker進程優先級:[-20,20]

4、worker_rlimit_nofile number;

worker進程所能夠打開的文件數量上限,如65535


事件驅動相關的配置:

events {

...

}

1、worker_connections number;

每個worker進程所能夠打開的最大併發連接數數量,如10240

總最大併發數:worker_processes * worker_connections

2、use method;

指明併發連接請求的處理方法 ,默認自動選擇最優方法

示例:use epoll;

3、accept_mutex on | off;

處理新的連接請求的方法;on指由各個worker輪流處理新請求,Off指每個新請求

的到達都會通知(喚醒)所有的worker進程,但只有一個進程可獲得連接造成“驚羣”,

影響性能



調試和定位問題

1、daemon on|off;

是否以守護進程方式運行nignx,默認是守護進程方式

2、master_process on|off;

是否以master/worker模型運行nginx;默認爲on,off 將不啓動worker

3、error_log file [level] ;

錯誤日誌文件及其級別;出於調試需要,可設定爲debug;但debug僅在編譯時使

用了“--with-debug”選項時纔有效

/path/logfile: 記錄到文件中

stderr: 發送到標準錯誤

syslog:server-address[,parameter=values] 發送到syslog

memory:size 內存

level:debug|info|notice|warn|error|crit|alter|emerg 日誌級別

 

1、server { ... }

配置一個虛擬主機

server {

listen address[:PORT]|PORT;

server_name SERVER_NAME;

root /PATH/TO/DOCUMENT_ROOT;

}


2、listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy] 

[backlog=number] [rcvbuf=size] [sndbuf=size];

default_server 設定爲默認虛擬主機

ssl 限制僅能夠通過ssl連接提供服務

backlog=number 超過併發連接數後,新請求進入後援隊列的長度

rcvbuf=size 接收緩衝區大小

sndbuf=size 發送緩衝區大小

注意:

(1) 基於port;

listen PORT; 指令監聽在不同的端口

(2) 基於ip的虛擬主機

listen IP:PORT; IP 地址不同

(3) 基於hostname

server_name fqdn; 指令指向不同的主機名


3、server_name name ...;

虛擬主機的主機名稱後可跟多個由空白字符分隔的字符串

支持*通配任意長度的任意字符

server_name *.winthcloud.com www.winthcloud.*

支持~起始的字符做正則表達式模式匹配,性能原因慎用

server_name ~^www\d+\.winthcloud\.com$

說明: \d 表示 [0-9]

匹配優先級機制從高到低

(1) 首先是字符串精確匹配 如:www.winthcloud.com

(2) 左側*通配符 如:*.winthcloud.com

(3) 右側*通配符 如:www.winthcloud.*

(4) 正則表達式 如: ~^.*\.winthcloud\.com$

(5) default_server


4、tcp_nodelay on | off;

在keepalived模式下的連接是否啓用TCP_NODELAY選項

當爲off時,延遲發送,合併多個請求後再發送

默認On時,不延遲發送

可用於:http, server, location

5、sendfile on | off;

是否啓用sendfile功能,在內核中封裝報文直接發送,默認Off

6、server_tokens on | off | build | string

是否在響應報文的Server首部顯示nginx版本


定義路徑相關的配置

7、root

設置web資源的路徑映射;用於指明請求的URL所對應的文檔的目錄路徑,

可用於http, server, location, if in location

server {

...

root /data/www/vhost1;

}

示例

http://www.winthcloud.com/images/logo.jpg

--> /data/www/vhosts/images/logo.jpg


8、location [ = | ~ | ~* | ^~ ] uri { ... }

location @name { ... }

在一個server中location配置段可存在多個,用於實現從uri到文件系統的路

徑映射;ngnix會根據用戶請求的URI來檢查定義的所有location,並找出一個

最佳匹配,而後應用其配置

示例:

server {...

server_name www.winthcloud.com;

location /images/ {

root /data/imgs/;

}

}

http://www.winthcloud.com/images/logo.jpg

--> /data/imgs/images/logo.jpg


出現多個時其匹配順序

= 對URI做精確匹配;

location = / {

...

}

http://www.winthcloud.com/ 匹配

http://www.winthcloud.com/index.html 不匹配

^~ 對URI的最左邊部分做匹配檢查,不區分字符大小寫

~  對URI做正則表達式模式匹配,區分字符大小寫

~* 對URI做正則表達式模式匹配,不區分字符大小寫

不帶符號 匹配起始於此uri的所有的uri

匹配優先級從高到低:

=, ^~, ~/~*, 不帶符號


9、alias path;

路徑別名,文檔映射的另一種機制;僅能用於location上下文

示例:

http://www.winthcloud.com/bbs/index.html

location /bbs {

alias /web/forum/;

} --> /web/forum/index.html 注意: /bbs 後建議不要加 /

location /bbs/ {

root /web/forum/;

} --> /web/forum/bbs/index.html

注意:location中使用root指令和alias指令的意義不同

(a) root,給定的路徑對應於location中的/uri 左側的/

(b) alias,給定的路徑對應於location中的/uri 的完整路徑

10、index file ...;

指定默認網頁文件,此指令由ngx_http_index_module模塊提供


11、error_page code ... [=[response]] uri;

模塊:ngx_http_core_module

定義錯誤頁,以指定的響應狀態碼進行響應

可用位置:http, server, location, if in location

error_page 404 /404.html

error_page 404 =200 /404.html

error_page 404 =302 /index.html


12、try_files file ... uri;

try_files file ... =code;

按順序檢查文件是否存在,返回第一個找到的文件或文件夾(結尾加斜線表示爲文

件夾),如果所有文件或文件夾都找不到,會進行一個內部重定向到最後一個參數。

只有最後一個參數可以引起一個內部重定向,之前的參數只設置內部URI的指向。最

後一個參數是回退URI且必須存在,否則會出現內部500錯誤

location /images/ {

try_files $uri /images/default.gif;

} 說明:/images/default.gif是URI

location / {

try_files $uri $uri/index.html $uri.html =404;

}



定義客戶端請求的相關配置

13、keepalive_timeout timeout [header_timeout];

設定保持連接超時時長,0表示禁止長連接,默認爲75s

14、keepalive_requests number;

在一次長連接上所允許請求的資源的最大數量,默認爲100

15、keepalive_disable none | browser ...;

對哪種瀏覽器禁用長連接

16、send_timeout time;

向客戶端發送響應報文的超時時長,此處是指兩次寫操作之間的間隔時長,而非整個

響應過程的傳輸時長


17、client_body_buffer_size size;

用於接收每個客戶端請求報文的body部分的緩衝區大小;默認爲16k;超出此大小時,

其將被暫存到磁盤上的由下面client_body_temp_path指令所定義的位置

18、client_body_temp_path path [level1 [level2 [level3]]];

設定存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量

目錄名爲16進制的數字;

client_body_temp_path /var/tmp/client_body 1 2 2

1 1級目錄佔1位16進制,即2^4=16個目錄 0-f

2 2級目錄佔2位16進制,即2^8=256個目錄 00-ff

2 3級目錄佔2位16進制,即2^8=256個目錄 00-ff


對客戶端進行限制的相關配置

19、limit_rate rate;

限制響應給客戶端的傳輸速率,單位是bytes/second

默認值0表示無限制

20、limit_except method ... { ... },僅用於location

限制客戶端使用除了指定的請求方法之外的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS,

PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {

allow 192.168.1.0/24;

deny all;

}

除了GET和HEAD 之外其它方法僅允許192.168.1.0/24網段主機使用


文件操作優化的配置

21、aio on | off | threads[=pool];

是否啓用aio功能 asynchronous I/O

22、directio size | off;

當文件大於等於給定大小時,例如directio 4m,同步(直接)寫磁盤,而非寫緩存

23、open_file_cache off;

open_file_cache max=N [inactive=time];

nginx可以緩存以下三種信息:

(1) 文件元數據:文件的描述符、文件大小和最近一次的修改時間

(2) 打開的目錄結構

(3) 沒有找到的或者沒有權限訪問的文件的相關信息

max=N:可緩存的緩存項上限;達到上限後會使用LRU算法實現管理

inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中

的次數少於open_file_cache_min_uses指令所指定的次數的緩存項即爲非活動項,

將被刪除


24、open_file_cache_errors on | off;

是否緩存查找時發生錯誤的文件一類的信息

默認值爲off


25、open_file_cache_min_uses number;

open_file_cache指令的inactive參數指定的時長內,至少被命中此處指定的次數

方可被歸類爲活動項

默認值爲1

26、open_file_cache_valid time;

緩存項有效性的檢查頻率

默認值爲60s


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章