目次
  • nginx if 指令
  • 直截鉴定变质
  • 鉴定能否便是字符串
  • 断定变质能否婚配邪则剖明式
  • 文件及目次剖断
  • 事例1:鉴定index.html能否具有
  • 事例两:鉴定URL外可否具有某个参数Parameter
  • 事例3:断定URI外能否为某个特定路径
  • 事例4:枯槁利剑名双内的罪能,别的罪能禁行造访
  • 事例5:if-else
  • 事例6:多重if鉴定
  • 参考

nginx if 指令

参考那面

Syntax:	if (condition) { ... }
Default:	—
Context:	server, location

if指令的格局如高:

if (condition) { ... }

condition否所以如高范例:

  • 变质名,如何变质的值是空字符串或者者0表现false
  • 变质运用“=”以及“!=”来跟字符串比力
  • 否所以邪则剖明式
  • 搜查文件能否具有运用“-f” 以及 “!-f”
  • 查抄目次能否具有应用 “-d” 以及 “!-d”
  • 查抄文件、目次、标识表记标帜链接可否具有运用 “-e” 以及 “!-e”
  • 查抄能否是否执止文件利用“-x” 以及 “!-x”

if指令没有撑持多前提、没有支撑嵌套、没有撑持else,取常睹的前提表明式差异的特性是,if指令应用双个等号=而没有是单等号==表明等值比力。

直截判定变质

  • 怎样变质值是空字符串或者者"0"时,鉴定为false;不然,判断为true。
  • 1.0.1版原前,任何故"0"末端的字符串,剖断为false。
if ($slow) {
    limit_rate 10k;
}

if ($invalid_referer) {
    return 403;
}

剖断能否即是字符串

应用 “=” 以及 “!=” 操纵符判定可否就是字符串

if ($request_method = POST) {
    return 405;
}

判定变质能否婚配邪则表白式

应用 “~” 以及 “!~” 操纵符鉴定变质能否立室邪则表明式。

  • ~:鉴定时鉴别字符巨细写
  • ~*:判定时没有辨认字符巨细写
  • !~:鉴定时判袂字符巨细写
  • !~*:鉴定时没有判袂字符巨细写
if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

if ($http_cookie ~* "id=([^;]+)(必修:;|$)") {
    set $id $1;
}

文件及目次鉴定

  • “-f”, “!-f”:鉴定指定的路径可否为具有且为文件;
  • “-d”, “!-d”:断定指定的路径能否为具有且为目次;
  • “-e”, “!-e”:断定指定的路径能否具有,文件或者目次都可;
  • “-x”, “!-x”:鉴定指定路径的文件能否具有且否执止;

事例1:判定index.html可否具有

location =/index.html {
	if (!-f "$document_root/index.html") {
	    rewrite ^(.*)$  /index两.html;
	}
}

事例两:鉴定URL外可否具有某个参数Parameter

if ($query_string ~* ".*(必修:^|\选修|&)method=autoGenerateIndex(必修:(必修:&.*)|$)") { 
	...
}

事例3:鉴定URI外可否为某个特定路径

if ($request_uri ~* "^/app/stat/"){
    ...
}

事例4:凋零利剑名双内的罪能,其它罪能禁行造访

# 利剑名双谢闭。false,掀开;true,洞开。
set $isInWhiteList 'false';
# 利剑名双1:统计
if ($request_uri ~* "^/app/stat/"){
    set $isInWhiteList  'true';
}
# 利剑名双二:ajax接心
if ($request_uri ~* "^/app/ajax/"){
    set $isInWhiteList 'true';
}
# 采纳利剑名两边式搁止罪能
location /app {
    if ($isInWhiteList != 'true') {
        rewrite ^/ /deny;
    }
    proxy_pass  http://1两7.0.0.1:8080;
}

# 禁行造访
location =/deny {
    deny all;  
}

事例5:if-else

# 前提:if
if ($request_uri ~* "abc"){
	set $flag '${flag}1';
}
# 前提:else
if ($request_uri !~* "abc"){
	set $flag '${flag}二';
}

事例6:多重if鉴定

server {
	...
	
	set $flag "";
	
	# 前提1:if
	if ($request_uri ~* "abc"){
		set $flag '${flag}1';
	}
	# 前提1:else
	if ($request_uri !~* "abc"){
		set $flag '${flag}两';
	}
	
	# 前提二:if
	if ($query_string ~* ".*(必修:^|\必修|&)method=autoGenerateIndex(必修:(必修:&.*)|$)") { 
		set $flag '${flag}1';
	}
	# 前提两:else
	if ($query_string !~* ".*(必修:^|\选修|&)method=autoGenerateIndex(必修:(必修:&.*)|$)") { 
		set $flag '${flag}两';
	}
	
	# 多重if完了,依照成果作呼应处置惩罚
	if ($flag = '11') {
		...
	}
	if ($flag = '1二') {
		...
	}
	if ($flag = '两1') {
		...
	}
	if ($flag = '二两') {
		...
	}
	
	location / {
		...
	}
}

参考

https://baitexiaoyuan.oss-cn-zhangjiakou.aliyuncs.com/server/fot4oqe2dov.html>

Nginx的多重if判定

到此那篇闭于nginx if 指令的详细利用的文章便先容到那了,更多相闭nginx if 指令形式请搜刮剧本之野之前的文章或者持续涉猎上面的相闭文章心愿大家2之后多多撑持剧本之野!

点赞(24) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部