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