如何让nginx通过重写转发HTTP POST请求?

我的iOS应用程序正在通过http POST访问域A,但是我想将所有请求转发到域B.

如果我使用通常的rewrite ^/(.*)$ http://mydomain/$1 permanent; POST数据似乎会丢失。

如何使用NginX将HTTP POST数据传递到不同的域?

尝试使用反向代理支持 。 示例location部分将是:

 location / { proxy_pass http://localhost:8080; proxy_redirect http://localhost:8080/ /; proxy_read_timeout 60s; # May not need or want to set Host. Should default to the above hostname. proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 

这个例子将通过所有的请求到这个server块到在localhost:8080上运行的第二台服务器。 这保留了POST的,也应该保留其他的请求types,如果它成为一个问题。

问题是外部redirect将不会重新发送POST数据。 这写入HTTP规范 (检查3xx部分)。 任何客户这样做是违反规范。

如果接收到301/302状态代码以响应除GET或HEAD以外的请求,则用户代理不能自动redirect请求,除非用户可以确认,因为这可能会改变请求发出的条件。

我相当肯定,大多数浏览器通过简单地强制redirect的请求是一个GET请求来实现这一点。 从理论上讲,这个规范确实允许一个浏览器询问用户是否redirectPOST数据,但是我并不知道目前有什么。