1,nginx內置變量
nginx 有很多內置變量可以進行簡單的過濾。
$arg_name請求行中的name參數。$args請求行中參數字符串。$cookie_name名為name的cookie。與$uri相同。$http_name任意請求頭的值;變量名的后半部為轉化為小寫并且用下劃線替代橫線后的請求頭名稱。$host“Host”請求頭的值,如果沒有該請求頭,則為與請求對應的虛擬主機的首要主機名。$query_string與$args相同。$realpath_root按root指令或alias指令算出的當前請求的絕對路徑。其中的符號鏈接都會解析成真是文件路徑。$remote_addr客戶端IP地址。$remote_port客戶端端口。$remote_user為基本用戶認證提供的用戶名。$request完整的原始請求行。$request_body請求正文。在由proxy_pass指令和 fastcgi_pass指令處理的路徑中, 這個變量值可用。$request_body_file請求正文的臨時文件名。處理完成時,臨時文件將被刪除。 如果希望總是將請求正文寫入文件,需要開啟client_body_in_file_only。 如果在被代理的請求或FastCGI請求中傳遞臨時文件名,就應該禁止傳遞請求正文本身。 使用proxy_pass_request_body off指令 和fastcgi_pass_request_body off指令 分別禁止在代理和FastCGI中傳遞請求正文。$request_completion請求完成時返回“OK”,否則返回空字符串。$request_filename基于root指令或alias指令,以及請求URI,得到的當前請求的文件路徑。$request_methodHTTP方法,通常為“GET”或者“POST”。$request_time請求處理的時間,單位為秒,精度是毫秒(1.3.9, 1.2.6);請求處理時間從由客戶端接收到第一個字節開始計算。$request_uri完整的原始請求行(帶參數)。$scheme請求協議類型,為“http”或“https”。$status響應狀態碼。$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space客戶端TCP連接的信息,在支持套接字選項TCP_INFO的系統中可用。$uri當前請求規范化以后的URI。變量$uri的值可能隨請求的處理過程而改變。 比如,當進行內部跳轉時,或者使用默認頁文件
特別需要注意的幾個:
$arg_name請求行中的name參數。$http_name任意請求頭的值;變量名的后半部為轉化為小寫并且用下劃線替代橫線后的請求頭名稱。$cookie_name名為name的cookie
這個幾個都是變量其中的name是具體的參數名稱。
設計的特別精巧,和lua的類似。具體進行參數攔截就這樣直接寫了。
2,攔截head中token
比如在做移動客戶端開發的時候,timestamp,token,sign,uuid參數
這個4個參數都是必須加上的。增加防刷的安全性。
token是客戶端登錄token。sign是請求數據簽名。
防止別人拿到url然后刷登錄接口。
最后一個是uuid,設備號,也能起到一定的防護作用。
禁用一個header頭里面的uuid為Android-uuid-1122998800。注意這里是$http_uuid 后面的uuid 是header頭里面的參數。
if ($http_uuid ~ 'android-uuid-1122998800') { return 403 "Error uuid forbidden."; }
進行ip攔截。如果發現有ip攻擊直接禁用掉。
if ($remote_addr ~ '10.198.2.2') { return 403 "Error uuid forbidden."; }
禁用攻擊日志。這部分日志會影響數據處理,直接禁用掉。
access_log off;
4,總結
可以禁用跳轉,處理,其中里面有常用的內置變量。
可以根據自己的業務邏輯組織下。提供系統穩定性。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答