nginx之rewrite功能

nginx之rewrite功能

地址重写与地址转发。
地址重写:

  • 地址标准化的过程。
  • 地址重写后浏览器地址栏改变。
  • 地址重写产生两次请求。
    地址转发:
  • 是指将一个域名指向另一个已有站点的过程。
  • 地址转发后浏览器地址栏地址不会改变。
  • 只产生一次请求。
  • 一般在同一站点项目内,可以不用全路径名表示。
  • 速度较快,可以将客户端返回的属性传递。

rewrite功能

nginx的rewrite功能需要借助PCRE库,基于http标准模块ngx_http_rewrite_module模块。
rewrite功能相关指令:
1.if指令:

if (condition) {...} # 类似编程设计的if,如果condition条件满足,执行{}里面的内容
condition支持变量和正则表达式。
# 示例:
1.变量名,如果变量的值为空或者是以0开头的字符串则判断为false,否则为true.
if ($slow){
    # nginx配置
    ...
}
2.使用=或!=判断变量和值是否相等
if (){
    

}
3.使用正则表达式匹配条件
if ($http_user_agent ~ MSIE) {  
    # 如果变量$http_user_agent ~ MSIE含有 MSIE 字符串则为true,否则为false
    # 整个()一般不加引号,如果含有右花括号或者分号则需要给整个正则表达式添加引号。
    ...
}
4.判断请求的文件是否存在使用-f或者!-f
if (-f $request_filename){
    ...
}
if (!-f $request_filename){
    ...
}
5.判断请求的目录是否存在,使用-d或者!-d
6.判断请求的目录或文件是否存在,使用-e或者!-e
7.判断请求的文件是否可以执行,使用-x或者!-x

2.break指令

# break指令用于中断当前作用域的nginx配置,返回上一层作用域
location / {
    if ($slow){
        set $id $1
        break;
        limit _rate 10k  # 配置无效
    ...
    }
    # 其他作用域的配置不受影响
    ...
}

3.reture指令

# reture向客户端返回状态码,在reture后面的指令无效。格式如下:返回如301、303、404或者URL地址
reture [text]
reture code URL;
reture URL;

4.rewrite指令

# 通过正则表达式改变URI,按顺序匹配
rewrite regex replacement [flag];
1.regex 用于匹配URI的正则表达式
2.replacement 匹配成功后用于替换regex中截取的字符串
3.flag设置rewriite对URI的处理,last,break,redirect,permanent

5.rewrite_log指令

# 设置是否开启rewrite的日志输出功能
rewrite_log on|off

6.set指令

# 设置新的变量
set variable value  # variable变量名称,使用$开头,不能与nginx全局变量相同;value变量的值

使用rewrite进行域名跳转:

    server {
        listen       80;
        server_name  www.test.com;
        # 通过www.test.com跳转到https://www.lovejoan.com,浏览器地址栏改变
        rewrite ^/ https://www.lovejoan.com;
        rewrite_log on;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
           # root   html;
           # index  index.html index.htm;
            proxy_pass http://192.168.138.36:8080;
        }

nginx之rewrite功能

上一篇:OSCP Security Technology - Modifying Shellcode


下一篇:vue自动路由/vue自动生成路由