天天看點

Nginx中if語句的使用,通過if語句判斷一個url請求中是否含有敏感字元,包含敏感字元則拒絕請求,否則請求正常通路。

1、正規表達式比對:

符号 說明
== 等值的比較
~ 與指定正規表達式模式比對,區分字元大小寫
~* 與指定正規表達式模式比對,不區分字元大小寫
!~ 與指定正規表達式模式不比對,區分字元大小寫
!~* 與指定正規表達式模式不比對,不區分字元大小寫

2.檔案及目錄比對:

符号 說明
-f ,!-f 判斷指定路徑的檔案是否存在
-d, !-d 判斷指定路徑的目錄是否存在
-e, !-e 判斷指定路徑的檔案或目錄是否存在
-x, !-x 判斷指定路徑的檔案是否存在且可執行
-r,!-r 判斷指定路徑的檔案是否存在且可讀
-w,!-w 判斷指定路徑的檔案是否存在且可寫

3.通過if語句判斷一個url請求中是否含有敏感字元,包含敏感字元則拒絕請求,否則請求正常通路。

nginx變量:

$server_addr :擷取伺服器ip

$request_uri : 擷取url請求

$arg_paramsName :擷取請求參數paramsName

$http_host :擷取用戶端host

$scheme :擷取http或https協定

nginx.conf配置:

server {
		listen 8899;
		server_name localhost;
		location /{
			#擷取url完整請求
			set $URL  $scheme://$http_host$request_uri;
			#根據擷取的URL比對一些限制字元,滿足條件拒絕訪
			#這裡以www字元為例,可自行修改
			if ($URL ~ "www"){
				echo "請求帶有敏感字元'www',拒絕通路!";
				#重定向到百度
				#rewrite ^/(.*) http://www.baidu.com/ permanent; 
				}
			echo "正常通路,url=" $URL;
		}
	}
           

通路帶有www字元:curl http://127.0.0.1:8899/test?params=www.qq.com&code=1234&msg=helloworld

[[email protected] /]# curl http://127.0.0.1:8899/test?params=www.qq.com&code=1234&msg=helloworld
[1] 37147
[2] 37148
[[email protected] /]# 請求帶有敏感字元'www',拒絕通路!

           

通路不帶www字元:http://127.0.0.1:8899/test?params=w.qq.com&code=1234&msg=helloworld

[[email protected] /]# curl http://127.0.0.1:8899/test?params=w.qq.com&code=1234&msg=helloworld
[1] 37149
[2] 37150
[[email protected] /]# 正常通路,url= http://127.0.0.1:8899/test?params=w.qq.com
           

注:在nginx中不支援if else的多重判斷。