nginx的rewrite指令
需求:我们在接收到⼀个/api/upload 开头的url的时候要转发到另外⼀个地址。但是⼜不想追加/api/upload 只想追加/upload 地址。Nginx提供了rewrite指令,⽤于对地址进⾏重写,语法规则:
rewrite "⽤来匹配路径的正则" 重写后的路径 [指令];
我们的案例:
server {
listen 80;nginx停止命令
server_name api.leyou;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 上传路径的映射
location /api/upload {
proxy_pass 127.0.0.1:8082;
proxy_connect_timeout 600;
proxy_read_timeout 600;
rewrite "^/api/(.*)$" /$1 break;
}
location / {
proxy_pass 127.0.0.1:10010;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
⾸先,我们映射路径是/api/upload,⽽下⾯⼀个映射路径是 / ,根据最长路径匹配原则,/api/upload优先级更⾼。也就是说,凡是以/api/upload开头的路径,都会被第⼀个配置处理
proxy_pass:反向代理,这次我们代理到8082端⼝,也就是upload-service服务
rewrite "^/api/(.*)$" /$1 break,路径重写:
"^/api/(.*)$":匹配路径的正则表达式,⽤了分组语法,把/api/以后的所有部分当做1组
/$1:重写的⽬标路径,这⾥⽤$1引⽤前⾯正则表达式匹配到的分组(组编号从1开始),即/api/后⾯的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的⽬的
break:指令,常⽤的有2个,分别是:last、break
last:重写路径结束后,将得到的路径重新进⾏⼀次路径匹配
break:重写路径结束后,不再重新匹配路径。
我们这⾥不能选择last,否则以新的路径/upload/image来匹配,就不会被正确的匹配到8082端⼝了
修改完成,输⼊nginx -s reload命令重新加载配置。然后再次上传试试。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论