nginx rewrite 用法,用rewrite去除URL中的特定参数

日常服务中经常会用Nginx做一层代理转发,把Nginx当做前置机

比如,以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
# 对外暴露 80 端口
listen 80;
server_name 192.168.10.231;

# 后端API地址暴露为:http://192.168.10.231/apis
location /apis {
proxy_pass http://127.0.0.1:8000/;
proxy_pass_request_headers on;
# 重写URL 去除apis
rewrite "^/apis/(.*)$" /$1 break;
}

}

这里的rewrite 就是为了去除URL中的/apis,实际的后端api中是没有这个参数的,但是为了做到在Nginx转发请求,前端需要加上这个参数,以便于区别

比如前端的请求地址是

1
http://192.168.10.231/apis/user

那么实际上经过Nginx转发后请求的地址是

1
http://127.0.0.1:8000/user

rewrite “^/api/(.)$” /$1 break,路径重写:

1
2
(1)"^/api/(.)$":匹配路径的正则表达式,用了分组语法就是*(.)**,把/api/以后的所有部分当做1组;
(2)/$1:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始,也就是api),即/api/后面的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的目的

break:指令,常用的有2个,分别是:last、break;

1
2
(1)last:重写路径结束后,将得到的路径重新进行一次路径匹配;
(2)break:重写路径结束后,不再重新匹配路径。