灵活使用rewrite

Posted toov5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了灵活使用rewrite相关的知识,希望对你有一定的参考价值。

nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用。

Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。

通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。

Rewrite全局变量

nginx的rewrite规则就是使用正则匹配请求的url,然后根据定义的规则进行重写和改变,需ngx_http_rewrite_module模块来支持url重写功能,该模块是标准模块,默认已经安装。

变量

含义

$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相同。

 

场景: 银行允许IE浏览器,Chrome访问不了。

          禁止某个IP访问

          获取浏览器基本信息

  

判断IP地址来源

   

  ## 如果访问的ip地址为192.168.5.165,则返回403

     if  ($remote_addr = 192.168.5.166) { 

         return 403; 

     }  

 

限制浏览器访问

## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500

 if ($http_user_agent ~ Chrome) {  

         return 500; 

        }

 

判断语句最好放在server里面 或者 location里面

(如果不满足就不走 location了)

 

浏览器被拦截

技术分享图片

技术分享图片

 

 拦截的原理:

   IP地址和浏览器: 判断请求头,request response

技术分享图片

 

以上是关于灵活使用rewrite的主要内容,如果未能解决你的问题,请参考以下文章

Nginx Rewrite重写

Nginx Rewrite重写

Nginx Rewrite语法详解

nginx location Rewrite 乱七八糟 农贷

location和rewrite介绍

charles抓包工具数据怎么看