nginx rewrite导致post数据丢失

最近碰到个问题,发现post的数据会丢失,配置如下:

{

servername bar.com
``location /abc {
``rewrite ^ http://foo.com/abc;
}

}

goole了一下,发现很多人都碰到过这个问题。

原因如下:

(1)POST的时候,参数是存放在message body中传递的,对于内部的url调转,因为是相同的一次请求,所以message body(request body)没变,所以POST数据不会丢失。

(2)而对于外部跳转,实际上是一次302,即用户再GET请求了一次,所以第二次就不会带第一次POST的数据了。

解决方法:

使用proxy_pass 。因为proxy之前的url和proxy的url不同,需要做location,并需要在在proxy_pass中写全路径。

参考例子如下:

{

servername bar.com
``location /abc {
``proxy_pass http://<span style="text-decoration: underline;">foo.com/abc</span>;
}
}