Nginx内置变量及if语句

首先我们先来简单介绍一些Nginx中常用的内置变量,如下:

参数 含义
$host 请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称
$http_HEADER HTTP请求头中的内容,HEADER为HTTP请求中的内容转为小写,-变为_(破折号变为下划线),
例如:$http_user_agent(Uaer-Agent的值)
$remote_addr 客户端的IP地址
$remote_port 客户端的端口
$request_method 这个变量是客户端请求的动作,通常为GET或POST
$request_uri 这个变量等于包含一些客户端请求参数的原始URI
$scheme 所用的协议,比如http或者是https
$server_name 服务器名称
$server_port 请求到达服务器的端口号
$server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1
$uri 请求中的当前URI(不带请求参数,参数位于$args)

其实我们之前在nginx.conf 配置文件简介中,配置日志文件格式的时候,也使用到了一些内置变量
Nginx内置变量及if语句




接下来,我们再看一下Nginx的if语句的用法:

语句 含义
=    != 比较的一个变量和字符串是否相等
~    ~* 与正则表达式匹配的变量,如果这个正则表达式中是否包含
-f    !-f 检查一个文件是否存在
-d    !-d 检查一个目录是否存在
-e    !-e 检查一个文件、目录、符号链接是否存在
-x    !-x 检查一个文件是否可执行

其常用正则如:

  • 静态资源:location ~* /.*\.(htm|js|css)$
  • 域名校验:if($http_origin ~ http://(.*).kami.com)
  • 浏览器校验:if($http_user_agent ~ Firefox)

接下来我们就来看几个简单的if语句的例子,如下:
Nginx内置变量及if语句
比如我们之前介绍过的set,我们设置一个值,然后判断它,如果是直接返回501,然后检查配置
Nginx内置变量及if语句
我们发现了其中有一处错误,所以我们在配置的时候,需要进行注意,在if后记得需加空格
Nginx内置变量及if语句
        Nginx内置变量及if语句



比如我们还可以来判断,我们访问的url路径,比如我们不允许访问.php和.jsp页面,如下:
Nginx内置变量及if语句

这样我们就可以拦截所有以.php或者.jsp结尾的访问
         Nginx内置变量及if语句



另外我们再来看一看if语句的 -f/!-f、-d/!-d 是用来判断一个文件、或者一个目录是否存在,如下
Nginx内置变量及if语句
         Nginx内置变量及if语句



最后我们在来看一看拦截浏览器是如何设置的,如下不允许火狐的浏览器进行访问:
Nginx内置变量及if语句
         Nginx内置变量及if语句
而其他浏览器可以正常访问
         Nginx内置变量及if语句


最后说明的是,我们这里是利用了Nginx的一些常用的内置变量和if语句进行演示,这里也可以使用在我们的location之中的。