nginx常用模組介紹
作為靜態資源伺服器
靜態資源服務場景-CDN
- 配置語法
配置語法
Syntax:sendfile on|off; #開啟零拷貝 Default:sendfile off; Context:http,server,location,if in location Syntax:tcp_nopush on|off; # sendfile開啟的情況下,提高網路包的傳輸效率 Default:tcp_nopush off; Context:http,server,location Syntax:tcp_nodelay on|off; # keeplive連線下,提高網路包的傳輸實時性 Default:tcp_nodelay off; Context:http,server,location
配置壓縮
Syntax:gzip on|off; # 開啟壓縮傳輸
Default:gzip off;
Context:http,server,location
Syntax:gzip_comp_level level; # 配置壓縮的級別
Default:gzip_comp_level 1;
Context:http,server,location
Syntax:gzip_http_version 1.0|1.1; # 配置http的版本
Default:gzip_http_version 1.1;
Context:http,server,location
- 擴充套件Nginx壓縮模組
擴充套件模組
http_gzip_static_module #預讀gzip功能,節省CPU對檔案的壓縮時間,但對硬碟要求儲存兩份
gzip_static on;
tcp_nopush on;
root /opt/app/code;
http_gunzip_module #應用支援gunzip的壓縮方式
- 瀏覽器快取
Http協議定義的快取機制(如:Expires;Cache-control等)
瀏覽器請求--->無快取--->請求WEB伺服器--->請求響應,協商--->呈現 瀏覽器請求--->有快取--->校驗過期--->呈現
校驗過期機制
校驗是否過期 Expires、Cache-Control(max-age)
協商中Etag頭資訊校驗 Etag
Last-Modified頭資訊校驗 Last-Modified
配置expires
Syntax:expires [modified] time; # 時間週期
expires epoch | max | off;
Default:expires off;
Context:http,server,location,if in location
- 跨域訪問
配置跨域
Syntax:add_header name value [always] # 新增頭資訊 name Access-Controll-Allow-Origin value 允許跨域訪問的網站地址
Default:--;
Context:http,server,location,if in location
- 防盜鏈
目的:防止資源被盜用
配置語法
Syntax:valid_referers none|blocked|server_names |String.. #
Default:--;
Context:server,location
代理伺服器
正向代理
客戶端通過代理伺服器訪問服務端,類似於一個跳板機
反向代理
客戶端無感知代理的存在,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。客戶端不需要任何配置就可以訪問
區別
正向代理的物件是客戶端
反向代理的物件是服務端配置語法
配置語法
Syntax:proxy URL # URL表示代理伺服器去請求的URL
Default:--;
Context:location,if in location,limit_except
代理相關的配置-緩衝區
Syntax:proxy_buffering on | off # 是否開啟緩衝區
Default:proxy_buffering on;
Context:http,server,location
代理相關的配置-跳轉重定向
Syntax:proxy_redirect default # 跳轉重定向
Default:proxy_redirect default;
Context:http,server,location
代理相關的配置-頭資訊
Syntax:proxy_set_header field value; # 代理頭資訊
Default:proxy_set_header Host $prox_host;
proxy_set_header Connection close;
Context:http,server,location
代理相關的配置-超時
Syntax:proxy_connection_timeout time; # 代理頭資訊
Default:proxy_connection_timeout 60s;
Context:http,server,location
擴充套件
proxy_read_time、proxy_send_timeout
負載均衡
GSLB 全域性的負載均衡
SLB
nginx負載均衡
nginx負載均衡主要是用到代理(proxy_pass) 到一組伺服器(upstream server)中去
upstream 配置語法
Syntax:upstream name{}; # 代理頭資訊
Default:--;
Context:http
例如
upstream balanc { #定義upstream
server 116.62.103.228:8001;
server 116.62.103.228:8002;
server 116.62.103.228:8003;
}
location / {
proxy_pass http://balanc; #引用負載均衡 也是利用代理的標籤
include proxy_params; #引入公共的代理引數
}
在upstream中定義的server後面還可以加很多引數 如下
down #當前的server暫時不參與負載均衡
backup #預留的備伺服器
max_fails #允許失敗的次數
fail_timeout #經過max_fails次失敗後,服務暫停的時間
max_conns #限制最大接收的連線數
nginx輪詢排程演算法
輪詢:按時間順序逐一分配到不同的後端伺服器
加權輪詢:weight值越大,分配到的訪問許可權越高
ip_hash:每個請求按訪問IP的hash結果分配,這樣來自同一個IP的固定訪問一個後端伺服器
least_conn:最少連結數,那個機器連線數少就分發
url_hash:按照訪問的URL的hash結果來分配請求,是每個URL定向到同一個後端伺服器
hash關鍵值:hash自定義的key
動態快取
快取的分類
代理快取:資料快取在代理伺服器上
服務端快取:資料快取在伺服器上
客戶端快取:資料快取在客戶端上
proxy_cache配置語法
先要配置proxy_cache_path 配置資料存放的路徑
Syntax: 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];
Default: —
Context: http
配置proxy_cache
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
快取過期的週期 proxy_cache_valid
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
快取的維度 proxy_cache_key
Syntax: proxy_cache_key string;
Default:
proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
讓某些頁面不快取
Syntax: proxy_no_cache string ...;
Default: —
Context: http, server, location
大檔案分片請求
Syntax: slice size;
Default: slice 0;
Context: http, server, location
怎麼清楚快取
- 直接rm -rf 快取目錄中的內容