Nginx反向代理部分接口出现404报错

一、背景

前端和后端部署在不同的服务器,在前端服务器使用Nginx做反向代理访问后端,但有部分接口出现404报错,如图:

1.png

二、原因

数据集PID86.10358.231/fb514791-87e0-4168-8500-ff8d05add62c,含有特殊字符"/",

在没有代理的情况下,前端会把特殊字符"/"转义为"%2F",生成的URL为:

http://202.38.77.91/api/v3/Datasets/86.10358.231%2Ffb514791-87e0-4168-8500-ff8d05add62c/thumbnail
复制代码

但Nginx拦截了该URL,并在反向代理时,解释转义字符,URL就变成了:

http://192.168.123.21:3000/api/v3/Datasets/86.10358.231/fb514791-87e0-4168-8500-ff8d05add62c/thumbnail
复制代码

后端没有这个接口http://192.168.123.21:3000/api/v3/Datasets/86.10358.231/,出现404报错。

三、解决

需要在Nginx配置文件中,加一个特殊的拦截规则:

location /api/v3/Datasets/86.10358.231/ {      
    proxy_pass http://192.168.123.21:3000/api/v3/Datasets/86.10358.231%2F/  
}
复制代码

四、总结

这种情况并没有普遍性,在此只是做个记录。