Nginx中指令
Rewrite模块
1 return指令
Syntax: return code [text];
return code URL;
return URL;
Default: —
Context: server, location, if
返回状态码
- nginx自定义
- 444:关闭连接
- HTTP1.0标准
- 301:http1.0永久重定向
- 302:临时重定向,禁止被缓存
- HTTP1.1标准
- 303:临时重定向,允许改变方法,禁止被缓存
- 307:临时重定向,不允许改变方式,禁止被缓存
- 308:永久重定向,不允许改变方法
示例
server {
server_name wiki.clay-wangzhi.com;
listen 8080;
root html/;
error_page 404/403.html;
return 403;
location / {
return 404 "find nothing!";
}
}
return指令与errror_page

2 rewrite指令
Syntax: rewrite regex replacement [flag];
Default: —
Context: server, location, if
功能
将regex指定的url替换成replacement这个新的url
可以使用正则表达式及变量提取
当replacement以http://或者https://或者$schema开头,则直接返回302重定向
替换后的url根据flag指定的方式进行处理
如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
last:
- 浏览器地址栏URL地址不变
- 用replacement这个URI进行新的location匹配,重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;
beak:
- 浏览器地址栏URL地址不变
- break指令停止当前脚本指令的执行,等价于独立的break指令,重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;
redirect:
- 浏览器地址会显示跳转后的URL地址
- 返回302临时重定向,
permanent:
- 浏览器地址会显示跳转后的URL地址
- 返回301永久重定向
功能一句话概括为:使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
示例1
root html/;
location /first {
rewrite /first(.*) /second$1 last;
return 200 'first!';
}
location /second {
rewrite /second(.*) /third$1 break;
return 200 'second!';
}
location /third {
return 200 'third!';
}
访问/first/1.txt的结果为:html/third/1.txt的内容
访问/second/1.txt的结果为:html/third/1.txt的内容
访问/third/1.txt的结果为:third的内容
示例2
# http://www.test.com/test/abc/1.html ⇒ http://www.test.com/ccc/bbb/2.html
location /test {
rewrite .* /ccc/bbb/2.html permanent;
}
# http://www.test.com/2015/ccc/bbb/2.html ==> http://www.test.com/2014/ccc/bbb/2.html
location /2015 {
rewrite ^/2015/(.*)$ /2014/$1 permanent;
}
# http://www.test.com/2015/ccc/bbb/2.html ==> http://jd.com/index.php
location /2015 {
if ($host ~* test.com) {
rewrite .* http://www.jd.com/index.php permanent;
}
}
# http://www.test.com/kkk/1.html ==> http://jd.com/kkk/1.html
location / {
root html;
index index.html index.htm;
if ($host ~* test.com) {
rewrite .* http://www.jd.com/$request_uri permanent;
}
}
# 有时候在访问一个二级子目录时会出现目录后的/无法补齐,如:
# elinks --dump www.test.com/www 无法访问
# elinks --dump www.test.com/www/可以访问
if (-d $request_filename) {
rewrite ^(.*)([^/])$ http://$host$1$2/ permanent;
}
# ^/(.*)([^/])$表示以/符号开始并紧跟着任何字符,同时不是以/为结束的字符串,在我的url中,(.*)表示的ww,([^/])表示的w
# http://www.test.com/login/robin.html ==> http://www.test.com/reg/login.php?user=robin
location /login {
rewrite ^/login/(.*)\.html$ /reg/login.php?user=$1 permanent;
}
# http://www.test.com/uplook/10-10-10.html ==> http://www.test.com/uplook/10/10/10.html
location /uplook {
rewrite ^/uplook/([0-9]+)-([0-9]+)-([0-9]+)\.html$ /uplook/$1/$2/$3.html permanent;
}
# set 指令是用于定义一个变量,并且赋值。应用于server,location,if环境。
# http://robin.test.com ==> http://www.test.com/robin
# http://zorro.test.com ==> http://www.test.com/zorro
if ($host ~* "^www.test.com$") {
break;
}
if ($host ~* "^(.*)\.test\.com$") {
set $user $1;
rewrite .* http://www.test.com/$user permanent;
}
last 一般写在server和if中,而break一般使用在location中
3 if指令
Syntax: if (condition) { ... }
Default: —
Context: server, location
规则:条件condition为真,则执行大括号内的指令;遵循值指令的继承规则
if指令的条件表达式
- 检查变量为空或者值是否为0,直接使用
- 当表达式只是一个变量时,如果值为空或任何以 0 开头的字符串都会当做 false
- 将变量与字符串做匹配,使用=或者!=
- 将变量与正则表达式做匹配
- 大小写敏感,或者!
- 大小写不敏感,*或者!*
- 检查文件是否存在,使用-f或者!-f
- 检查目录是否存在,使用-d或者!-d
- 检查文件、目录、软连接是否存在,使用-e或者!-e
- 检查是否为可执行文件,使用-x或者!-x
示例
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
if ($repuest_method = POST) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
4 rewrite_log指令
Syntax: rewrite_log on | off;
Default: rewrite_log off;
Context: http, server, location, if
Nginx中指令的更多相关文章
- 干货 | 一文彻底读懂nginx中的location指令
一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 一文带你读懂Nginx反向代理 ...
- Nginx中的一些匹配顺序
Nginx中经常需要做各种配置,总结如下: 1.server_name配置 nginx中的server_name指令主要用于配置基于名称虚拟主机,同一个Nginx虚拟主机中,可以绑定多个server_ ...
- Nginx中FastCGI配置优化
FastCGI: FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器 ...
- Nginx中防盗链(下载防盗链和图片防盗链)操作记录
日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...
- 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...
- Nginx 配置指令location 匹配符优先级和安全问题【转】
Nginx配置指令location匹配符优先级和安全问题 使用nginx 很久了,它的性能高,稳定性表现也很好,得到了很多人的认可.特别是它的配置,有点像写程序一样,每行命令结尾一个";&q ...
- nginx log_format指令记录自定义响应头
我们用的nginx有做过一些定制开发,为了调试方便,加了一些自定义的response header,那么如何把这个自定义头记录到日志中以便于观察呢? nginx log_format指令支持这种扩展, ...
- nginx中时间的管理
nginx出于性能考虑採用类似lib_event的方式,自己对时间进行了cache,用来降低对gettimeofday()的调用,由于一般来说server对时间的精度要求不是特别的高,只是假设须要比較 ...
- Nginx 配置指令的执行顺序(八)
前面我们详细讨论了 rewrite.access 和 content 这三个最为常见的 Nginx 请求处理阶段,在此过程中,也顺便介绍了运行在这三个阶段的众多 Nginx 模块及其配置指令.同时可以 ...
随机推荐
- 菜鸡的Java笔记 国际化程序实现原理
国际化程序实现原理 Lnternationalization 1. Locale 类的使用 2.国家化程序的实现,资源读取 所谓的国际化的程序 ...
- [loj3031]聚会
对于一棵树(初始仅包含节点0),不断加入一个不在树中的节点$u$(不需要随机),并维护这棵树 具体的,对这棵树点分治,假设当前重心$v$有$d$个子树,假设其中第$i$个子树根为$r_{i}$,子树大 ...
- (前端)面试300问之(3)this的指向判断
一.this的相关理解与解读 1.各角度看this. 1)ECMAScript规范: this 关键字执行为当前执行环境的 ThisBinding. 2)MDN: In most cases, the ...
- git新手配置(ios环境)
ios环境,初步了解git是个什么东西,使用过svn相关软件最佳,否则可以先补一下git的相关概念和用处,相关教程:https://www.liaoxuefeng.com/wiki/896043488 ...
- Revit二次开发之获取本机已安装的Revit版本与路径
在revit安装目录下找到 RevitAddInUtility.dll 在项目中引用 使用以下方法 using Autodesk.RevitAddIns; /// <summary> // ...
- 难道你还不知道Spring之事务的回滚和提交的原理吗,这篇文章带你走进源码级别的解读。
上一篇文章讲解了获取事务,并通过获取的connection设置只读,隔离级别等:这篇文章讲事务剩下的回滚和提交. 事务的回滚处理 之前已经完成了目标方法运行前的事务准备工作.而这些准备工作的最大目的无 ...
- R语言与医学统计图形-【33】生存曲线、森林图、曼哈顿图
1.生存曲线 基础包survival+扩展包survminer. survival包内置肺癌数据集lung. library(survival) library(survminer) str(lung ...
- R语言与医学统计图形-【14】ggplot2几何对象之直方密度图
ggplot2绘图系统--几何对象之直方图.密度图 1.直方图 参数. geom_histogram(mapping = , data = , stat = 'bin', #统计变换,概率密度为den ...
- Can't connect to HTTPS URL because the SSL module is not available. - skipping
今天用pip3安装第三方库的时候报了这样一个错: Can't connect to HTTPS URL because the SSL module is not available. - skipp ...
- Zabbix源码安装,使用service命令管理zabbix进程
1. 前期环境: Zabbix源代码解压包:/root/zabbix-3.0.27 Zabbix安装路径:/usr/local/zabbix-3.0.27 2. 复制启动脚本到 ...