Nginx常見用法總結(jié)(面試必備)
Nginx在日常開發(fā)過程中主要作為靜態(tài)資源服務(wù)器(http服務(wù)器)和反向代理服務(wù)器。
Nginx常用變量
-
$host: 請求的主機頭 -
$remote_addr: 客戶端IP地址 -
$remote_port: 客戶端端口號 -
$remote_user: 已經(jīng)經(jīng)過Auth Basic Module驗證的用戶名 -
$http_referer: 請求引用地址 -
$http_user_agent: 客戶端代理信息(UA) -
$http_x_forwarded_for: 相當(dāng)于網(wǎng)絡(luò)訪問路徑 -
$body_bytes_sent: 頁面?zhèn)魉偷淖止?jié)數(shù) -
$time_local: 服務(wù)器時間 -
$request: 客戶端請求 -
$request_uri: 請求的URI,帶參數(shù), 不包含主機名 -
$request_filename: 請求的文件路徑 -
$request_method: 請求的方法,如GET、POST -
$args: 客戶端請求中的參數(shù) -
等同于args, 客戶端請求的參數(shù) -
$nginx_version: 當(dāng)前nginx版本 -
$status: 服務(wù)器響應(yīng)狀態(tài)碼 -
$server_addr: 服務(wù)器地址 -
$server_port: 請求到達的服務(wù)器端口號 -
$server_protocol: 請求的協(xié)議版本 -
$content_type: HTTP請求信息里的Content-Type字段 -
$content_length: HTTP請求信息里的Content-Length字段 -
請求中的當(dāng)前不帶請求參數(shù),參數(shù)位于args) -
$document_root: 當(dāng)前請求在root指令中指定的值 -
與uri相同
定義日志格式示例:
Nginx設(shè)置重定向
return形式
rewrite形式
rewrite flag說明:
-
last: 停止處理后續(xù)rewrite指令集,然后對當(dāng)前重寫的新URI在rewrite指令集上重新查找 -
break: 停止處理后續(xù)rewrite指令集,并不在重新查找,但是當(dāng)前l(fā)ocation內(nèi)剩余非rewrite語句和location外的非rewrite語句可以執(zhí)行 -
redirect: 如果replacement不是以http:// 或https://開始,返回302臨時重定向 -
permant: 返回301永久重定向
Nginx條件判斷
if判斷
比較符說明:
-
使用=、!= 比較的一個變量和字符串,true/false -
使用~、~*與正則表達式匹配的變量,如果這個正則表達式中包含右花括號}或者分號;則必須給整個正則表達式加引號 -
使用-f、!-f 檢查一個文件是否存在 -
使用-d、!-d 檢查一個目錄是否存在 -
使用-e、!-e 檢查一個文件、目錄、符號鏈接是否存在 -
使用-x、!-x 檢查一個文件是否可執(zhí)行set設(shè)置變量 Nginx反向代理
proxy_pass
fastcgi_pass
fastcgi_pass將請求傳遞給FastCGI服務(wù)器
uwsgi_pass
uwsgi_pass將請求傳遞給uwsgi服務(wù)器(如python服務(wù))
scgi_pass
scgi_pass將請求傳遞給SCGI服務(wù)器
memcached_pass
memcached_pass將請求傳遞給memcached服務(wù)器
Nginx負(fù)載均衡
Nginx通過proxy_pass和upstream指令實現(xiàn)負(fù)載均衡,Nginx原生支持的負(fù)載均衡算法有如下幾種:
輪詢
每個請求按時間順序逐一分配到不同的應(yīng)用服務(wù)器,如果應(yīng)用服務(wù)器down掉,自動剔除,剩下的繼續(xù)輪詢
權(quán)重
通過配置權(quán)重,指定輪詢幾率,權(quán)重和訪問比率成正比,用于應(yīng)用服務(wù)器性能不均的情況
ip_hash
每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個應(yīng)用服務(wù)器,可以解決session共享的問題。
least_conn
最小連接數(shù)
示例:
Nginx緩存
Proxy Cache
Nginx通過proxy_cache來實現(xiàn)緩存。Buffer和Cache都是用于提供IO吞吐小路的,但是概念不同。Buffer(緩沖)主要用于傳輸效率不同步或者優(yōu)先級不相同的設(shè)備之間傳輸數(shù)據(jù),一般通過對一方數(shù)據(jù)進行臨時存放,再統(tǒng)一發(fā)送的辦法傳遞給另一方,以降低進程之間的等待時間,保證速度較快的進程不發(fā)生間斷,臨時存放的數(shù)據(jù)一旦傳送給另一方,這些數(shù)據(jù)本身也就沒有用處了;Cache(緩存)主要用于將硬盤上已有的數(shù)據(jù)在內(nèi)存中建立緩存數(shù)據(jù),提高數(shù)據(jù)的訪問效率,對于過期不用的緩存可以隨時銷毀。
Proxy Cache機制依賴于Proxy Buffer機制,只有在Proxy Buffer機制開啟的情況下Proxy Cache的配置才會發(fā)揮作用。
相關(guān)配置參數(shù)說明:
-
proxy_cache: zone | off; # 默認(rèn)為off,即關(guān)閉proxy_cache功能,zone為用于存放緩存的內(nèi)存區(qū)域名稱 -
proxy_cache_path: path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]; -
path設(shè)置緩存數(shù)據(jù)存放的路徑; -
levels設(shè)置目錄層級,如levels=1:2,表示有兩級子目錄,第一個目錄名取md5值的倒數(shù)第一個值,第二個目錄名取md5值的第2和3個值。 -
keys_zone設(shè)置內(nèi)存zone的名字和大小,如keys_zone=my_zone:10m -
inactive設(shè)置緩存多長時間就失效,當(dāng)硬盤上的緩存數(shù)據(jù)在該時間段內(nèi)沒有被訪問過,就會失效了,該數(shù)據(jù)就會被刪除,默認(rèn)為10s。 -
max_size設(shè)置硬盤中最多可以緩存多少數(shù)據(jù),當(dāng)?shù)竭_該數(shù)值時,nginx會刪除最少訪問的數(shù)據(jù) 示例: Expires
Nginx實現(xiàn)Gzip壓縮
通過gzip相關(guān)指令可以配置Gzip壓縮,對響應(yīng)數(shù)據(jù)進行在線實時壓縮。
相關(guān)配置參數(shù)說明:
-
gzip: on; # 開啟或關(guān)閉gzip功能,默認(rèn)為off -
gzip_buffers: 16 8K; # 配置Gzip壓縮文件時使用的緩存空間大小,默認(rèn)number*size=128K -
gzip_comp_level: 9; # 壓縮級別,壓縮程度越高,壓縮效率最低,最費時間 -
gzip_min_length:# 配置最小壓縮的數(shù)據(jù)大小,如果響應(yīng)頁面的大小大于該值,才開啟Gzip功能(一些小文件會導(dǎo)致壓縮后的大小比源文件還大),默認(rèn)為20,建議設(shè)置為1k(1024) -
gzip_http_version:1.0; # 配置只有高于指定版本的HTTP協(xié)議才能開啟Gzip,默認(rèn)為1.1, 目前絕大多數(shù)瀏覽器都支持Gzip自解壓,一般采用默認(rèn)值即可 -
gzip_proxied:any; # 設(shè)置是否對被代理服務(wù)器返回的數(shù)據(jù)進行壓縮,默認(rèn)為off -
gzip_vary: on; # 開啟壓縮標(biāo)記,開啟后在響應(yīng)頭部添加 Vary: Accept-Encoding,默認(rèn)為off -
gzip_types:text/plain application/x-javascript text/css application/xml text/javascript; # 對指定類型的文檔進行Gzip壓縮 -
gzip_static:on; # 對于存在服務(wù)器上.gz作為后綴的文件,且客戶端瀏覽器支持gzip壓縮,就直接返回壓縮后的數(shù)據(jù) 示例: Nginx常見配置參數(shù)
-
server_names_hash_max_size 1024; -
server_names_hash_bucket_size 512; -
client_header_buffer_size 32k; # 客戶端請求頭部的緩沖區(qū)大 -
large_client_header_buffers 4 32k; -
client_max_body_size 10m;#設(shè)置最大的允許客戶端請求主體的大小(上傳文件大小限制), 默認(rèn)為1m -
client_body_buffer_size 128k; -
keepalive_timeout 60; #客戶端連接超時時間,單位是秒, 默認(rèn)是75秒 -
sendfile on; # 開啟高效傳輸模式,默認(rèn)為off -
tcp_nopush on; -
tcp_nodelay on; -
ssi on; # 開啟ssi支持,默認(rèn)為false -
ssi_silent_errors on; # 設(shè)置為on表示在處理ssi文件時不輸出錯誤信息,默認(rèn)為false -
ssi_types text/html; # 默認(rèn)支持html ,如果需要支持shtml(服務(wù)器執(zhí)行腳本),需要設(shè)置為ssi_types text/shtml -
server_tokens off; # 關(guān)閉nginx版本號的顯示,默認(rèn)為on
Nginx優(yōu)化相關(guān)參數(shù)
-
worker_processes 2; # 配置生成的worker process數(shù)量,一般為cpu核數(shù) -
worker_rlimit_nofile 65536; # 一個nginx進程打開的最多文件描述符數(shù)目,一般設(shè)置為與系統(tǒng)設(shè)定的值相同(ulimit -n) -
worker_cpu_affinity 01 10;# 為每個進程分配CPU的工作內(nèi)核 -
use epoll; # 事務(wù)模型 Nginx常見用法
依據(jù)UA屏蔽爬蟲
屏蔽IP訪問
使用Auth權(quán)限訪問
限制帶寬
限制連接
限制請求
實時顯示Nginx運行狀況
在安裝nginx是編譯http_stub_status_module即可,使用參數(shù)為–with-http_stub_status_module
設(shè)置錯誤頁面
Nginx 常見錯誤碼
-
301 永久重定向 -
302 臨時重定向 -
403 禁止訪問 -
404 文件不存在 -
413 文件上傳超過限制 -
500 服務(wù)器錯誤 -
502 后臺服務(wù)器無響應(yīng) -
504 Nginx超時,請求過多,工作進程不足 文章來源于網(wǎng)絡(luò),侵刪!
-
-
-
-