nginx rewrite配置解读

本文主要解析一下ngx_http_rewrite_module中的rewrite相关配置。

directives

名称

默认配置

作用域

官方说明

中文解读

模块

break

server, location, if

Stops processing the current set of ngx_http_rewrite_module directives.

中断当前的重写

ngx_http_rewrite_module

if

server, location

The specified condition is evaluated. If true, this module directives specified inside the braces are executed, and the request is assigned the configuration inside the if directive. Configurations inside the if directives are inherited from the previous configuration level.

if表达式成立则执行,if代码块里头的配置继承外部的配置; false和0都表示不成立; string比较,相等用=,不相等用!= ; 文件存在用-f,不存在用! -f ; 目录存在用-d,不存在用 ! -d ; 链接存在用-e,不存在用! -e ; 文件可执行用-x,不可执行用! -x

ngx_http_rewrite_module

return

无,语法 return code [text]; return code URL; return URL;

server, location, if

Stops processing and returns the specified code to a client. The non-standard code 444 closes a connection without sending a response header.

停止处理并返回,返回444的话则会关闭连接,连header都不会发送

ngx_http_rewrite_module

rewrite

无,语法 rewrite regex replacement [flag];

server, location, if

If the specified regular expression matches a request URI, URI is changed as specified in the replacement string. The rewrite directives are executed sequentially in order of their appearance in the configuration file. It is possible to terminate further processing of the directives using flags. If a replacement string starts with “http://”, “https://”, or “$scheme”, the processing stops and the redirect is returned to a client.

last停止匹配,使用重写后的url进行新的匹配; break停止当前的url重写; redirect进行302跳转; permanent进行301跳转

ngx_http_rewrite_module

rewrite_log

rewrite_log off;

http, server, location, if

Enables or disables logging of ngx_http_rewrite_module module directives processing results into the error_log at the notice level.

设置是否在error_log以notice级别开启rewrite的log

ngx_http_rewrite_module

set

无,语法 set $variable value;

server, location, if

Sets a value for the specified variable. The value can contain text, variables, and their combination.

设置变量

ngx_http_rewrite_module

uninitialized_variable_warn

uninitialized_variable_warn on;

http, server, location, if

Controls whether warnings about uninitialized variables are logged.

设置是否打印使用了未初始化变量的log

ngx_http_rewrite_module

实例

http {
        # a special log format referencing variables we'll define later
        log_format imagelog '[$time_local] ' $image_file ' 
                            '$image_type ' 
                            ' $body_bytes_sent ' 
                            ' $status;

        # we want to enable rewrite-rule debugging to see if our rule does what we intend
        rewrite_log on;

        server {
            root /home/www;
            location / {
                # we specify which logfile should receive the rewriteruledebug messages
                error_log logs/rewrite.log notice;

                # our rewrite rule, utilizing captures and positional variables
                # note the quotes around the regular expression theseare required because we used {} within the expression itself
                rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4;

                # note that we didn't use the 'last' parameter above; if we had, the variables below would not be set because NGINX would have ended rewrite module processing here we set the variables that are used in the custom log format 'imagelog'
                set $image_file $3;
                set $image_type $4;
            }
    }
}

doc

  • ngx_http_rewrite_module

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2018-01-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大壮

iOS 内存管理的理解分享(理论篇)

20070
来自专栏决胜机器学习

Redis专题(十)——Redis存储Session

Redis专题(十) ——Redis存储session (原创内容,转载请注明来源,谢谢) 一、概述 PHP默认是将session存于服务器...

38150
来自专栏noteless

-1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),

java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法...

11740
来自专栏linux运维学习

linux学习第六十六篇:shell中的函数,shell中的数组,告警系统需求分析

shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。 格式: function ...

31480
来自专栏Java帮帮-微信公众号-技术文章全总结

03.线程安全/同步/线程通讯

03.线程安全/同步/线程通讯 一.一个典型的Java线程安全例子 ? ? 上面例子很容易理解,有一张银行卡,里面有1000的余额,程序模拟你和你老婆同时在取款...

44670
来自专栏老九学堂

【干货】2016Java高薪面试题第三波

问:Java中的两种异常类型是什么?他们有什么区别? 答:Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。 不受检查...

31440
来自专栏Java帮帮-微信公众号-技术文章全总结

hibernate延迟加载详解

hibernate延迟加载详解 Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。hiber...

32330
来自专栏H2Cloud

TCPDUMP 抓包

  写了个脚本, 用于调试服务器消息传输, 代码如下: #!/bin/bash if [ $# -eq 0 ] ; then echo "usage local...

32850
来自专栏大内老A

.NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象

配置的原子结构就是单纯的键值对,并且键和值都是字符串,但是在真正的项目开发中我们一般不会单纯地以键值对的形式来使用配置。值得推荐的做法就是采用《.NET Cor...

202100
来自专栏PPV课数据科学社区

python多线程编程(2): 线程的创建、启动、挂起和退出

如上一节,python 的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法。而创建自己的线程实例后,通...

26760

扫码关注云+社区

领取腾讯云代金券