Nginx配置中的if判断
当rewrite的重写规则满足不了需求时,比如需要判断当文件不存在时、当路径包含xx时等条件,则需要用到if
if语法
if (表达式) {...
}
表达式语法:
- 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
- 直接比较变量和内容时,使用=或!=
- -f和!-f用来判断是否存在文件
- -d和!-d用来判断是否存在目录
- -e和!-e用来判断是否存在文件或目录
- -x和!-x用来判断文件是否可执行
为了配置if的条件判断,这里需要用到nginx中内置的全局变量
$args 这个变量等于请求行中的参数,同$query_string
$content_length 请求头中的Content-length字段。
$content_type 请求头中的Content-Type字段。
$document_root 当前请求在root指令中指定的值。
$host 请求主机头字段,否则为服务器名称。
$http_user_agent 客户端agent信息
$http_cookie 客户端cookie信息
$limit_rate 这个变量可以限制连接速率。
$request_method 客户端请求的动作,通常为GET或POST。
$remote_addr 客户端的IP地址。
$remote_port 客户端的端口。
$remote_user 已经经过Auth Basic Module验证的用户名。
$request_filename 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme HTTP方法(如http,https)。
$server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name 服务器名称。
$server_port 请求到达服务器的端口号。
$request_uri 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri 与$uri相同。
举例说明
1、如果文件不存在则返回400
if (!-f $request_filename) {return 400;
}
2、如果host不是jouypub.com,则301到jouypub.com中
if ( $host != 'jouypub.com' ){rewrite ^/(.*)$ https://jouypub.com/$1 permanent;
}
3、如果请求类型不是POST则返回405
if ($request_method = POST) {return 405;
}
4、如果参数中有a=1
则301到指定域名
if ($args ~ a=1) {rewrite ^ http://example.com/ permanent;
}
5、在某种场景下可结合location规则来使用,如:
# 访问 /test.html 时
location = /test.html {# 设置默认值为xiaowuset $name xiaowu;# 如果参数中有 name=xx 则使用该值if ($args ~* name=(\w+?)(&|$)) {set $name $1;}# 301rewrite ^ /$name.html permanent;
}
上面表示:
/test.html => /xiaowu.html
/test.html?name=ok => /ok.html?name=ok
Nginx配置中的if判断相关推荐
- Nginx配置中的log_format用法梳理(设置详细的日志格式)
Nginx配置中的log_format用法梳理(设置详细的日志格式) nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式:另外一条是access_log,用来指定日志 ...
- Nginx 配置中一个不起眼字符 “/“ 的巨大作用
Nginx作为一个轻量级的,高性能的web服务软件,因其占有内存少,并发能力强的特点,而广受欢迎和使用.国内很多大型互联网公司也对Nginx很是青睐.像BAT(百度,阿里和腾讯),TMD(头条,美团和 ...
- Nginx配置中一个不起眼字符/的巨大作用,失之毫厘谬以千里
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://zhuanlan.zhihu. ...
- Nginx动态、静态分离,Nginx配置中做适配
Nginx[静态,动态] 页面是html,mp3,mp4,txt,doc,pdf 动态脚本语言:shell,PHP,java 一: LNMP (Linux+Nginx+MariaDB==m ...
- nginx配置中proxy_redirect的作用(转)
来自http://wntest.ustc.edu.cn/mine/wordpress/?p=400 及 http://hi.baidu.com/171892549/blog/item/0ec6aae ...
- nginx配置中location匹配规则详解
女主宣言 nginx作为一款性能优异的反向代理服务器,可以用于静态代理.负载均衡.限流等多种场景.那么,要灵活的使用nginx,必须清楚nginx配置文件的使用.本文作者对nginx的http块中的l ...
- nginx配置中root与alias的区别
nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri ...
- Nginx配置中的80端口
server {listen 80;//浏览器默认端口server_name aa.bb.cn;//#提供服务的域名主机号location /tt/ {proxy_pass http://localh ...
- Nginx 配置中nginx和alias的区别分析
一.root和alias都可以定义在location模块中,都是用来指定请求资源的真实路径 root location /i/ { root /data/w3; } #请求 http://foofis ...
最新文章
- asp.net 连接access数据库方法
- Leetcode232使用栈实现队列
- [BUUCTF-pwn]——[第六章 CTF之PWN章]stack
- SQL基础三(例子)
- 计算机为什么检测不到u盘启动项,BIOS设置U盘为第一启动项后检测不到如何解决?...
- postgis安装_从零开始,构建电子地图网站:0_2_数据处理postgis
- array_walk与array_map的区别
- 插件多行显示_Sublime Text 3最好的功能、插件和设置
- LoNg wAy tO Go
- 大数据_Flink_流式处理_简介_Flink的特点---Flink工作笔记0006
- opengl 坐标的基本变换
- 单列(写了池子pool)用list实现的方法, 与伪单例(写了池子zidianpool),用字典实现的方法,可以存入不同,i名字的物体...
- 2014-2015 ACM-ICPC, NEERC, Eastern Subregional Contest Problem H. Pair: normal and paranormal
- Linux driver 板级文件跟踪一般方法
- Linux内核对per-cpu变量的实现
- 关于我国高等数学教材的版权发财户
- 简单有效的记录日常收支
- 轻量级Kubernetes之k3s:10:ContainerCreating状态的解决方法
- 计算机专业专硕,2018厦门大学计算机专硕考研经验贴(专业课干货!!)
- 盘点八大虚拟桌面基础架构(VDI)协议