nginx if 指令的具体使用

 更新时间:2024年05月11日 09:33:28   作者:sayyy  
if指令该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置,本文主要介绍了nginx 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 ^(.*)$  /index2.html;
	}
}

示例2:判断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';
}
# 白名单2:ajax接口
if ($request_uri ~* "^/app/ajax/"){
    set $isInWhiteList 'true';
}
# 采用白名单方式放行功能
location /app {
    if ($isInWhiteList != 'true') {
        rewrite ^/ /deny;
    }
    proxy_pass  http://127.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}2';
}

示例6:多重if判断

server {
	...
	
	set $flag "";
	
	# 条件1:if
	if ($request_uri ~* "abc"){
		set $flag '${flag}1';
	}
	# 条件1:else
	if ($request_uri !~* "abc"){
		set $flag '${flag}2';
	}
	
	# 条件2:if
	if ($query_string ~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") { 
		set $flag '${flag}1';
	}
	# 条件2:else
	if ($query_string !~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") { 
		set $flag '${flag}2';
	}
	
	# 多重if完了,根据结果做相应处理
	if ($flag = '11') {
		...
	}
	if ($flag = '12') {
		...
	}
	if ($flag = '21') {
		...
	}
	if ($flag = '22') {
		...
	}
	
	location / {
		...
	}
}

参考

https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if

Nginx的多重if判断

到此这篇关于nginx if 指令的具体使用的文章就介绍到这了,更多相关nginx if 指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Nginx 对访问量的控制

    详解Nginx 对访问量的控制

    本文详解的介绍了 Nginx 的 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块,对请求访问量进行控制。非常具有实用价值,需要的朋友可以参考下
    2018-12-12
  • nginx 匹配规则小总结(推荐)

    nginx 匹配规则小总结(推荐)

    这篇文章主要介绍了nginx 匹配规则小总结及nginx配置proxy_pass路径带/问题,需要的朋友可以参考下
    2018-07-07
  • Nginx文件下载站点搭建的实现步骤

    Nginx文件下载站点搭建的实现步骤

    本文主要介绍了Nginx文件下载站点搭建的实现步骤,包含配置Nginx和Fancyindex来搭建文件下载站点,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • nginx高可用集群的实现过程

    nginx高可用集群的实现过程

    这篇文章主要介绍了nginx高可用集群的实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Nginx配置编写时支持逻辑运算与大小写字母转换的方法

    Nginx配置编写时支持逻辑运算与大小写字母转换的方法

    这篇文章主要介绍了Nginx配置编写时支持逻辑运算与大小写字母转换的方法,其中大小写字母转换是以lower upper case模块来实现,需要的朋友可以参考下
    2016-01-01
  • Nginx禁止访问php文件的方法总结

    Nginx禁止访问php文件的方法总结

    当涉及到禁止访问 PHP 文件时,有多种方法可以考虑,以下是十多种方法的详细说明,以及如何在 Nginx 中应用它们,需要的朋友可以参考下
    2023-09-09
  • Nginx代理Partainer的具体使用

    Nginx代理Partainer的具体使用

    本文主要介绍了Nginx代理Partainer的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 为Nginx添加mp4流媒体支持

    为Nginx添加mp4流媒体支持

    这篇文章主要介绍了为Nginx添加mp4流媒体支持的的相关资料,需要的朋友可以参考下
    2014-12-12
  • 详解Nginx 和 PHP 的两种部署方式的对比

    详解Nginx 和 PHP 的两种部署方式的对比

    这篇文章主要介绍了详解Nginx 和 PHP 的两种部署方式的对比的相关资料,需要的朋友可以参考下
    2017-06-06
  • Nginx禁止指定UA访问的方法

    Nginx禁止指定UA访问的方法

    这篇文章主要介绍了Nginx禁止指定UA访问的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论