#Nginx 用proxy_pass做反向代理返回400错误
问题背景
前端web项目,经常会遇到跨域访问的问题,利用Nginx的proxy_pass可以很轻松的配置反向代理,解决这个问题。
假设资源服务器是asset-server,用以下配置,可以把asset-server/app 挂载到 server/app
location ^~ /app {
proxy_pass http://asset-server;
}
这样能解决大部分的问题,但是当路径包含特殊字符,例如空格等,需要进行转义urlencode时,就回遇到问题。
解决方法
需要对uri进行重写:
location ^~ /app {
rewrite ^ $request_uri; # get original URI
rewrite ^/app/(.*) app/$1 break; # drop /foo, put /bar
return 400; # if the second rewrite won't match
proxy_pass http://asset-server/$uri;
}
特别注意
如果有多层代理,每一层都需要rewrite。
参考
location /api/ {
rewrite ^ $request_uri;
rewrite ^/api/(.*) $1 break;
return 400;
proxy_pass http://127.0.0.1:82/$uri;
}
扫一扫关注微信公众号:耿直的IT男阿斌
聊一聊IT男眼中的世界