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语句的用法:
语句 | 含义 |
---|---|
= != | 比较的一个变量和字符串是否相等 |
~ ~* | 与正则表达式匹配的变量,如果这个正则表达式中是否包含 |
-f !-f | 检查一个文件是否存在 |
-d !-d | 检查一个目录是否存在 |
-e !-e | 检查一个文件、目录、符号链接是否存在 |
-x !-x | 检查一个文件是否可执行 |
其常用正则如:
- 静态资源:
location ~* /.*\.(htm|js|css)$
- 域名校验:
if($http_origin ~ http://(.*).kami.com)
- 浏览器校验:
if($http_user_agent ~ Firefox)
接下来我们就来看几个简单的if语句的例子,如下:
比如我们之前介绍过的set,我们设置一个值,然后判断它,如果是直接返回501,然后检查配置
我们发现了其中有一处错误,所以我们在配置的时候,需要进行注意,在if后记得需加空格
比如我们还可以来判断,我们访问的url路径,比如我们不允许访问.php和.jsp页面,如下:
这样我们就可以拦截所有以.php或者.jsp结尾的访问
另外我们再来看一看if语句的 -f/!-f、-d/!-d 是用来判断一个文件、或者一个目录是否存在,如下
最后我们在来看一看拦截浏览器是如何设置的,如下不允许火狐的浏览器进行访问:
而其他浏览器可以正常访问
最后说明的是,我们这里是利用了Nginx的一些常用的内置变量和if语句进行演示,这里也可以使用在我们的location之中的。