nginx,rewrite,proxy_pass,post数据,表单
个人微博:http://weibo.com/h2fly欢迎技术交流
今天接到一个需求,前台要调用后台的短信发送网关:必须以post形式传递参数,并且前台的发送短信的请求的url和后台的发送短信的url不一致
前台的url为http://xxx.test.com/ajax/mobiledynamiclogincode
后台的发送短信网关的url为:
http://xxx2.test.com/json/account/mobiledynamiclogincode
分析:
1、nginx中的rewrite到外部url会导致post的参数丢失,所以放弃该方案。(内部的rewrit是不会丢失post数据)
原因:
(1)post的时候,参数是存放在message body中传递的,对于内部的url调转,因为是相同的一次请求,所以message body(request body)没变,所以post数据不会丢失。
(2)而对于外部跳转,实际上是一次302,即用户在请求了一次,所以第二次就不会post第一次的数据了。
具体如下:你post数据之后,匹配到rewrite之后,因为是外部的url,用户会看到一个302,之后请求的url就变成了get。。那么之前post的数据就丢失了(因为用户没有再提交一次数据)
2、需要传递post参数,需要使用proxy_pass。同时,因为proxy之前的url和proxy的url不同,需要做location,并需要在在proxy_pass中写全路径参考例子如下
思考了为啥proxy_pass能传递post的参数:因为对于用户而言,就只是一个请求,所以request body没变。nginx会将该request body传递到后续的server
location /ajax/mobiledynamiclogincode {
proxy_pass http://xxx2.test.com/json/account/mobiledynamiclogincode;
}
个人微博:http://weibo.com/h2fly
欢迎技术交流
页:
[1]