Nginx提供了rewrite指令,用于对地址进行重写,语法规则:
rewrite "用来匹配路径的正则" 重写后的路径 [指令];
zuul网关拦截的是/api/upload/**
我们的案例:
server {
listen 80;
server_name api.test.com;
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 {
rewrite "^/(.*)$" /zuul/$1;
}
location / {
proxy_pass http://127.0.0.1:10010;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
-
首先,我们映射路径是/api/upload,而下面一个映射路径是 / ,根据最长路径匹配原则,/api/upload优先级更高。也就是说,凡是以/api/upload开头的路径,都会被第一个配置处理
-
rewrite "^/(.*)$" /zuul/$1
,路径重写:-
"^/(.*)$"
:匹配路径的正则表达式,用了分组语法,把/
以后的所有部分当做1组 -
/zuul/$1
:重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始),在原始路径的基础上,添加了/zuul
前缀。
-
修改完成,输入nginx -s reload
命令重新加载配置。然后再次上传试试。