在软件的发布中,我们经常会使用到 Nginx,Nginx 的功能非常的庞杂,其中 rewrite 是一个非常常用的功能模块,本文介绍 rewrite 的基本概念和几个小技巧。
rewrite 是 Nginx 中的一个模块,这个模块用来重定向页面,在 rewrite 模块中包含了几个指令来实现不同的功能:
return 指令是 rewrite 模块中非常常用的一个指令,可以帮助我们做重定向和一些简单的返回。
return code text;
return code URL;
return URL;
return 指令的语法由两个或三个部分组成:
可以根据指定的正则表达式将用户请求的 url 转换成一个新的 url 进行重定向。
rewrite regex replacement [flag];
return 指令的语法四个部分组成:
通过 if 指令进行一些条件的判断,然后进行 return、rewrite 或是其他的一些处理。
if(condition){
}
下面以近期用到的两个场景来演示实际的用法。
场景描述:
配置如下:
server {
listen 80;
server_name localhost;
set $flag 0;
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry) ) {
set $flag "${flag}1";
}
if ($request_uri !~* /api/) {
set $flag "${flag}2";
}
if ($flag = "012") {
rewrite ^(.*) http://192.168.0.1:81? permanent;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api/ {
proxy_pass http://192.168.0.1:5000/;
}
error_page 500 502 503 504 /50x.html;
}
场景描述:
http://192.168.0.1?id=xxxxx&authcode=xxxxxxxx
http://192.168.0.1:81?authcode=xxxxxxxx
移动端可以做解析实现直接登录配置如下: