Nginx模塊介紹
- 核心模塊:core module
- 標准模塊:stand modules
- HTTP modules:
- Standard HTTP modules
- Optional HTTP modules
- Mail modules:
- Stream modules
- HTTP modules:
- 第三方模塊
使用示例
核心模塊
#main block
user www www; #進行用戶的身份
pid logs/nginx.pid; #指定主進程號的文件路徑
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; #是否以守護進程方式運行
master_process on; #是否以master-worker模型運行nginx,默認
error_log /var/log/nginx-error.log info; #錯誤日志
events { #事件驅動相關配置
use epoll; #指明並發請求的處理方式(io模型)
worker_connections 2048; #每個worker進程能夠打開的最大並發連接數
#accept 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$
匹配機制:
首先是字符串精確匹配
左側通配符匹配
右側*通配符匹配
正則表達式匹配
4.sendfile on|off;
是否開啟sendfile功能;
5.tcp_nodelay on|off;
在keepalived模式下的連接是否啟用tcp_nodelay選項;表示是否將小文件合並發送
6.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 ...[=[reponse]] uri;
指定錯誤代碼展示所定義的uri
6.try_files file ...uri;
try_files file ... = code;
通過指定順序查看文件是否存在並用找到的第一個文件相應請求
定義客戶端相關配置
1.keepalived_timeout timout [header_timeout];
設置保持連接的超時時長,0表示禁止保持連接,默認75s;
2.keepalived_requests number;
一次長連接允許請求的最大資源數量,默認1000;
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 [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/second,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可緩存的信息包括:
- 文件描述符,最后更新的時間,時間戳
- 打開的目錄結構
- 未找到或沒有權限訪問的文件相關信息
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機制進行用戶認證;
auth_basic string | off;
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
1 1 1
Reading:3 Writing:3 Waiting:3
Active connections:活動狀態的連接數
accepts:已接收的客戶端請求數量
handled:已處理的客戶端請求數量
requests:客戶端發送的總請求數
Reading:正在讀取客戶端請求報文首部的連接數
Writing:正在向客戶端發送響應報文的連接數
Waiting:正在等待客戶端發送請求報文的空閑連接數
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_users:在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的文件類型啟用壓縮功能
#示例
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/javascript;
ngx_http_sslmodule模塊
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:named:size];
ssl長連接緩存配置
buildin[:size]:使用Openssl內建的緩存,該緩存為此worker獨享
shared:name:size:在各worker之間建立一個共享緩存空間
6.ssl_session_timeout time;
客戶端連接可復用的ssl session cache中的ssl參數的有效時長
server {
listen 443 ssl;
server_name www.magedu.com;
root /vhosts/ssl/htdocs;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certficate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m;
}
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_name | string ...;
none:請求報文首部沒有regerer首部
blocked:請求報文首部的regerer首部為空
server_name:參數,其可以有值作為 主機名或主機名模式;
arbitrary_string:直接字符串,但可以用作通配符;
regular expression:被指定的正則表達式匹配到的字符串;要使用~打頭,例如 ~.\richfig.com;
valid_referers none block server_names *.richfit.com ~\.richfit\.;
if($invalid_referer) {
return http://www.magedu.com/invalid.jpg
}
ngx_http_proxy_module模塊
1.proxy_pass URL;
proxy_pass后面的路徑不帶URI時,其會將locatin的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:2:2 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進程保留的空閑連接時長
參考文檔:https://blog.csdn.net/sd4493091/article/details/81191747
