Nginx模塊介紹javascript
核心模塊:core modulecss
標準模塊:java
HTTP modules:node
Standard HTTP modulesnginx
Optional HTTP modulesweb
Mail modules正則表達式
Stream modules算法
第三方模塊:自主開發express
#main block user www www; #進程運行使用的用戶和組 pid logs/nginx.pid; #指定存儲nginx主進程號的文件路徑 include vhost/*.conf; #指明包含進來的其餘配置文件 #include mime.type #指明包含進來的其餘文件類型 #load module file; #指明要裝載的動態模塊 worker_processes 4 | auto; #worker進程的數量,應小於等於cpu核心數,auto爲當前主 #機cpu核心數 worker_cpu_affinity 0001 0010 0100 1000; #將worker進程與經過cpumask與指定cpu綁定 worker_priority -10; #指定worker進程的nice值,範圍[-20,20] worker_rlimite_nofile 2000; #指定worker進程可以打開的最大文件數 #daemon on; #是否已守護進程方式運行Nginx #master_process on; #是否已master-worker模型運行Nginx,默認on error_log /var/log/nginx-error.log info; #錯誤日誌 events { #事件驅動相關配置 use epoll; #指明併發鏈接請求的處理方式 worker_connections 2048; #每一個worker進程可以打開的最大併發鏈接數 #accpet mutex on | off; #處理新鏈接的方式,on意味着由每一個worker輪流處理新請 #求,off意味着每一個新請求到達都會通知全部worker進程 } 標準模塊-HTTP modules 與套接字相關配置 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] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sedbuf=size]
default_server:設置爲默認虛擬主機
ssl:設置僅能經過ssl協議提供服務
backlog:設置後援列隊長度
rcvbuf:設置接收緩存區大小
sedbuf:設置發送緩存區大小
3.server_name name ... ;
指明虛擬主機的主機名稱;後可跟多個由空白字符分割的字符串;
支持*通配符任意長度字符:server_name *.richfit.com www.richfit.*
支持~起始的字符作正則表達模式匹配:server_name ~^www.\d+\.richfit\.com$
匹配機制:
(1)首先是字符串精確匹配
(2)左側*通配符匹配
(3)右側*通配符匹配
(4)正則表達式匹配
4.sendfile on | off;
是否開啓sendfile功能;
5.tcp_nodelay on | off;
在keepalived模式下的鏈接是否啓用tcp_nodelay選項;表示是否將小文件合併發送
tcp_nopush on | off;
在sendfile模式下是否啓用tcp_cork選項;表示是否等待IP首部與文件合併發送
定義路徑相關配置
1.root path;
設置web資源路徑映射;用於指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;
2.location [ = | ~ | ~* | ^~ ] uri { ... }
在一個server中可配置在多個location配置段,用於實現uri到文系統的路徑映射;nginx會根據用戶請求的URI來檢查定義全部的location,並從中選擇一個最佳匹配,而後應用配置;
= :對URI作精確匹配
~ :對URI作正則表達模式匹配,區分大小寫
~*:對URI作正則表達模式匹配,不區分字符大小寫
^~:對URI左側部分作正則表達模式匹配,不區分大小寫
不帶符號:匹配起始於該URI的全部URL
匹配優先級:= , ^~ ,~/~* ,不帶符號
3.alias path;
定義路徑別名,文件映射的另外一種機制,僅能用於location配置段
4.index file ...;
請求的默認資源
5.error_page code ... [=[response]] uri;
指定錯誤代碼展現所定義的uri
6.try_files file ... uri;
try_files file ... =code;
經過指定順序查看文件是否存在並用找到的第一個文件相應請求
定義客戶端相關配置
1.keepalived_timeout timeout [header_timeout];
設置保持鏈接的超時時長,0表示禁止保持鏈接,默認爲75s;
2.keepalived_requests number;
一次長鏈接容許請求的最大資源數量,默認100
3.keepalived_disable none | browser;
對哪一種瀏覽器禁止長鏈接
4.send_timeout time;
向客戶端發送響應報文的超時時長,此處指兩次寫操做之間的時間間隔
5.client_body_buffer_size size;
用於接收客戶端請求報文body部分的緩衝區大小,默認爲16k,超過此大小將被暫存到磁盤上由client_body_tmp_path定義的位置
6.client_body_tmp_path path [ level1 [ level2 [ level3 ];
定義用於存儲客戶端請求報文body部分的臨時存儲路徑和子目錄結構、數量
client_body_tmp_path /var/tmp/client_body 1 2 2
1:表示用1位16進制數字表示一級子目錄:0-f
2:表示用2位16進制數字表示二級子目錄:00-ff
3:表示用2位16進制數字表示三級子目錄:00-ff
對客戶端進行限制的相關配置
1.limit_rate rate;
限制響應客戶端請求的傳輸速率,單位bytes/senond,0表示不限制
2.limit_except method { ... };
限制對指定請求方法以外的其餘方法使用的客戶端
文件操做優化相關配置
1.aio on | off | threads[=pool];
是否開啓aio功能
2.directio size | off;
啓用Linux的O_DIRECT標記,此處意味着大於等於給定大小時使用,
3.open_file_cache off;
open_file_cache max=N [ inactive=time ];
可緩存最大N個緩存項,Nginx可緩存的信息包括:
(1)文件描述符,最後更新時間,時間戳
(2)打開的目錄結構
(3)未找到或沒有權限訪問的文件相關信息
max=N:表示可緩存項的上限,超過上限後使用LRU算法實現緩存管理;
inactive=time:緩存項的非活動時間,在給定時間內未命中或命中數少於open_file_cache_min_uses定義的次數的緩存項視爲非活動項
4.open_file_cache_valid time;
緩存項有效性檢查的頻率,默認60s
5.open_file_cache_min_uses number;
在open_file_cache中inactive定義的時間內,命中超過多少次可視爲活動項
6.open_file_cache_errors on | off;
是否打開緩存項錯誤日誌
ngx_http_access_module模塊:
實現基於ip的訪問控制
1.allow address | CIDR | unix: | all;
2.deny address | CIDR | unix: | all;
ngx_http_auth_basic_module模塊:
實現基於用戶的訪問控制,使用basic機制進行用戶認證;
3.auth_basic string | off;
4.auth_basic_user_file file;
location /admin/ {
alias /webapps/app1/data/;
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.ngxpasswd;
}
ngx_http_stub_status_module模塊:
用於輸出nginx的基本狀態信息;
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
Active connections: 活動狀態的鏈接數
accepts:已接收的客戶端請求數量
handled:已處理的客戶端請求數量
requests:客戶端發送的總請求數
Reading:正在讀取客戶端請求報文首部的鏈接數
Writing:正在向客戶端發送響應報文的鏈接數
Waiting:正在等待客戶端發送請求報文的空閒鏈接數
5.stub_status;
配置示例:
location /basic_status {
stub_status;
}
ngx_http_log_module模塊:
1.log_format name string ... ;
定義日誌輸出格式,string能夠nginx核心模塊和其餘模塊內嵌的變量
2.access_log path [ format [ buffer=size ] [ gzip [=level ] ] [ flush=time ] [ if=condition ] ];
access_log off;
訪問日誌路徑配置
3.open_log_file_cache max=N [ inactive=time ] [ min_uses=N] [ valid=time ]
open_log_file_cache off;
緩存日誌的元數據相關配置
max:緩存的最大文件描述符數量
inactive:定義非活動時長
min_uses:在inactive時間內超過多少次能夠視爲活動項
valid:緩存項有效性檢查頻率
ngx_http_gzip_module模塊:
1.gzip on | off;
是否開啓響應報文壓縮
2.gzip_comp_level level;
壓縮等級,level的取值範圍爲1-9
3.gzip_disable regex ...;
響應報文"User-Agent"中包含匹配regex的報文不啓用壓縮
4.gzip_min_length length;
啓用壓縮功能的響應報文閾值
5.gzip_buffers number size;
支持使用壓縮功能爲其配置的緩存數量和大小
6.gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
nginx做爲代理服務器接收從被代理服務器發送的響應報文在何種狀況下啓用壓縮功能,
off:表示對代理請求不啓用壓縮
no-cache,no-store,private:表示從被代理服務器接收的報文首部的Cache-Control的值爲三者中的一個,則啓用壓縮功能
7.gzip_types mime-type ...;
只對MIME的文件類型啓用壓縮功能
ngx_http_ssl_module模塊:
1.ssl on | off;
是否對虛擬主機啓用https協議
2.ssl_certificate file;
當前虛擬主機使用的pem格式證書文件路徑
3.ssl_certificate_key file;
當前虛擬主機使用的證書所對應的私鑰文件路徑
4.ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持的ssl協議版本,默認支持後三個
5.ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
ssl長鏈接緩存配置
buildin[ :size ]:使用Openssl內建的緩存,該緩存爲此worker獨享
shared:name:size:在各worker之間創建一個共享緩存空間
6.ssl_session_timeout time;
客戶端鏈接可複用的ssl session cache中緩存的ssl參數的有效時長
ngx_http_rewrite_module模塊:
1.rewrite regex replacement [flag]
將用戶請求的URI基於regex所描述的模式進行檢查,而後完成替換;
注意:若是在同一級配置塊中存在多個rewrite規則,那麼會自下而下逐個檢查;被某條件規則替換完成後,會從新一輪的替換檢查,所以,隱含有循環機制;[flag]所表示的標誌位用於控制此循環機制;
flag:
last:重寫完成後中止對當前URI在當前location中後續的其餘重寫操做,然後對新URI啓動新一輪重寫檢查;提早重啓新一輪循環
break:重寫完成後中止對當前URI在當前location中後續的其餘重寫操做,然後直接跳轉到重寫配置塊以後的其餘配置;跳過循環
redirect:重寫完成後以臨時重定向的方式直接返回重寫後的新URI給客戶端,由客戶端從新發起請求,不能使用http和https開頭
permanent:重寫完成後以永久重定向的方式直接返回重寫後的新URI給客戶端,由客戶端發從新發起請求
2.return
return code [text];
return code URL;
return URL;
3.rewrite_log on | off;
是否開啓重寫日誌
4.if (condition) { ... }
引入一個新的配置上下文,條件知足時,執行配置塊中的配置指令,location,server
condition:
比較操做符:
==
!=
~:模式匹配,區分字符大小寫;
~*:模式匹配,不區分字符大小寫;
!~:模式不匹配,區分字符大小寫;
!~*:模式不匹配,不區分字符大小寫;
文件及目錄存在性判斷:
-e, !-e 判斷是否存在
-f, !-f 判斷是否存在文件
-d, !-d 判斷是否存在文件夾
-x, !-x 判斷是否存在且可執行
5.set $variable value;
定義變量並賦值
ngx_http_referer_module模塊:
1.valid_referers none | blocked | server_names | string ...;
none:請求報文首部沒有regerer首部
blocked:請求報文首部的regerer值爲空
server_names:參數,其能夠有值做爲主機名或主機名模式;
arbitrary_string:直接字符串,但可以使用*做通配符;
regular expression:被指定的正則表達式模式匹配到的字符串;要使用~打頭,例如 ~.*\.richfit\.com;
ngx_http_proxy_module模塊:
1.proxy_pass URL;
proxy_pass後面的路徑不帶uri時,其會將location的uri傳遞給後端主機;
proxy_pass後面的路徑是一個uri時,其會將location的uri替換爲proxy_pass的uri;
2.proxy_set_header field value;
設定發日後端主機的請求報文的值
3.proxy_cache_path
定義可用於proxy功能的緩存
proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
4.proxy_cache zone | off;
指定要緩存的區域或關閉緩存功能
5.proxy_cache_key string;
指定緩存中用於「鍵」的內容
6.proxy_cache_valid [code ...] time;
對特定響應碼的響應內容緩存的時長
定義在http{...}中;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
定義在須要調用緩存功能的配置段,例如server{...};
proxy_cache pxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
7.proxy_cache_use_stale
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...
8.proxy_cache_methods GET | HEAD | POST ...;
請求報文包括列在此處的請求方法是,響應報文使用緩存
9.proxy_hide_header field;
指定nginx未來自被代理服務器響應報文中須要隱藏的報文首部內容
10.proxy_connect_timeout time;
指定nginx與被代理服務器創建鏈接的超時時間
11.proxy_read_timeout time;
指定讀取被代理服務器響應報文的超時時間
12.proxy_send_timeout time;
指定將請求發送給被代理服務器的超時時間
ngx_http_headers_module模塊:
1.add_header name value [always];
nginx爲發送給客戶端的響應報文添加自定義首部或修改首部內容
2.expires [modified] time;
用於定義expire或定義Cache-Control首部的內容
ngx_http_fastcgi_module模塊:
1.fastcgi_pass address;
指定fastcgi地址
2.fastcgi_index name;
指定fastcgi默認訪問資源
3.fastcgi_param parameter value [if_not_empty];
指定須要傳遞給fastcgi的參數
4.fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
定義fastcgi的緩存,緩存位置爲磁盤上的文件系統,由path指定的路徑來定義,
5.fastcgi_cache zone | off;
調用指定緩存區域來緩存數據
6.fastcgi_cache_key string;
指定用於緩存項的key的字符創
7.fastcgi_cache_methods GET | HEAD | POST ...;
指定哪些方法使用緩存
8.fastcgi_cache_min_uses number;
在inactive時間內命中多少次可被視爲活動項
9.fastcgi_cache_valid [code ...] time;
指定不一樣響應碼緩存的時間
10.fastcgi_keep_conn on | off;
指定是否啓用fastcgi長鏈接
ngx_http_upstream_module模塊:
1.upstream name { ... }
定義後端服務器組,引入一個新的上下文
2.server address [parameters];
在upstream上下文中server成員,以及相關的參數;Context: upstream
address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number
權重,默認爲1;
max_fails=number
失敗嘗試最大次數;超出此處指定的次數時,server將被標記爲不可用;
fail_timeout=time
設置將服務器標記爲不可用狀態的超時時長;
max_conns
當前的服務器的最大併發鏈接數;
backup
將服務器標記爲「備用」,即全部服務器均不可用時此服務器才啓用;
down
標記爲「不可用」;
3.least_conn;
最少鏈接調度算法,當server權重不一樣時爲wlc
4.ip_hash;
源地址hash調度算法
5.hash key [consistent];
基於指定的key的hash表來實現請求調度
6.keepalive connections;
爲每一個worker進程保留的空閒鏈接時長