nginx-post请求被301到get请求,且丢失请求数据
问题如下
当nginx配置里location有最后一个斜杠
如果并且访问url不带/,nginx会自动进行301跳转到带斜杠的url
当nginx配置里location没有最后一个斜杠
url最后不加/,则是正常访问
url加了,则post请求会被重定向为get请求(如果目标路由有同时监听/test/和/test,则不会重定向)
建议
因此建议不清楚url是否会有/(访问路径是个目录),配置中不要加最后的/GET请求,nginx自动301跳转之后,会再次重新发起请求,因此GET请求这次不受影响,但POST请求,301跳转之后,会自动转成GET请求,同时post body会丢失,因此POST请求会失败
解决方法:规范好url的格式,比如必须要求以斜杠结尾
proxy_pass 路径末尾斜杠
location /dir/ {
proxy_pass http://127.0.0.1
}
收到请求 /dir/file 会转交给 http://127.0.0.1/dir/file
location /dir/ {
proxy_pass http://127.0.0.1/
}
收到请求 /dir/file 会转交给 http://127.0.0.1/file
注意到根路径发生了变化。
文章来源于:https://blog.csdn.net/weixin_40580582/article/details/102967419