前言
大家在浏览某些网站的时候,有没有发现,当输入:www.abc.com或者www.abcd.com的时候,页面均能正常显示www.abc.com的主页内容。这就是nginx rewrite的一个使用场景。
rewrite简介
rewrite是Nginx服务器提供的一个重要基本功能,主要作用用来实现URL地址重写
rewrite功能实现依赖于pcre的支持,因此在编译安装Nginx服务器之前,需安装pcre库(nginx使用ngx_http_rewrite_module模块来解析和处理Rewrite功能的相关配置)
在真正了解rewrite的使用之前,有必要全面系统学习下rewrite相关的指令和语法使用,下面来逐一了解下吧
Rewrite规则与指令
set指令
该指令用来设置一个新的变量。
- variable,变量名,该变量名要用"$"作为变量的第一个字符,且不能与Nginx服务器预设的全局变量同名;
- value:变量值,可以是字符串、其他变量或者变量的组合等;
一个简单的案例
server {
listen 8081;
server_name localhsot;
location /server {
set $name zhangsan;
set $age 19;
default_type text/plain;
return 200 $name=$age;
}
}
重启nginx服务,然后浏览器访问观察下效果
下面列举了Rewrite常用全局变量
这些变量可以在使用过程中结合自身的业务灵活选择使用
变量
说明
$args
变量中存放了请求URL中的请求指令。如http://IP:8080arg1=value1&args2=value2中 的"arg1=value1&arg2=value2",功能和$query_string一样
$http_user_agent
变量存储了用户访问服务的代理信息(如果通过浏览器访问,记录的是浏览器的相关版本信息)
$host
变量存储的是访问服务器的server_name值
$document_uri
变量存储了当前访问地址的URI。比如http://IP/serverid=10&name=zhangsan中的"/server",功能和$uri一样
$document_root
变量存储的是当前请求对应location的root值,如果未设置,默认指向Nginx自带html目录所在位置
$content_length
变量存储的是请求头中的Content-Length的值
$content_type
变量存储的是请求头中的Content-Type的值
$http_cookie
变量存储的是客户端的cookie信息,可以通过add_header Set-Cookie’cookieName=cookieValue’来添加cookie数 据
$limit_rate
变量中存储的是Nginx服务器对网络连接速率的限制,也就是Nginx配置中对limit_rate指令设置的值,默认是0,不限制
$remote_addr
变量中存储的是客户端的IP地址
$remote_port
变量中存储了客户端与服务端建立连接的端口号
$remote_user
变量中存储了客户端的用户名,需要有认证模块才能获取
$scheme
变量中存储了访问协议
$server_addr
变量中存储了服务端的地址
$server_name
变量中存储了客户端请求到达的服务器的名称
$server_port
变量中存储了客户端请求到达服务器的端口号
$server_protocol
变量中存储了客户端请求协议的版本,比如"HTTP/1.1"
$request_body_file
变量中存储了发给后端服务器的本地文件资源的名称
$request_method
变量中存储了客户端的请求方式,比如"GET","POST"等
$request_filename
变量中存储了当前请求的资源文件的路径名
$request_uri
变量中存储了当前请求的URI,并且携带请求参数,比如http://IP/serverid=10&name=zhangsan中的"/serverid=10&name=zhangsan名
我