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;
}