2015-12-22 73 views
0

例如, 客户端C向代理P发送请求, 代理P默认将所有请求转发到服务器S1, ,但某些请求的响应可能是301/302。哪个开源代理服务器可以基于服务器响应进行代理? (HAProxy,Nginx ...)

对于那些301/302响应,是否有任何代理服务器可能根据响应代码再次将这些请求转发到服务器S2。

+0

是否您希望代理指定客户端应该重定向到的服务器?您可以使用Nginx重新写入位置标题,以便在它返回到客户端时重定向到您想要的服务器。 – pastafarian

+0

谢谢Pastafarian: 1.我不想把它退还给客户。 2.它是一个POST请求,因为我知道客户端是否收到301/302响应,它将启动另一个GET请求。 所以我想知道是否有代理服务器可以基于S1的响应代码再次代理原始请求? – Zhi

+0

哦,我没有在原始问题中看到帖子....您可以使用反向代理,但这不仅适用于响应代码的子集。 – pastafarian

回答

0

的Nginx有一个方法来指导客户端通过设置Location头重定向到指定的服务器。这里的文档是:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

从DOC:

设置应该在代理服务器响应的“Location”“Refresh”头字段进行更改的文本。假设代理服务器返回了标题字段“Location: http://localhost:8000/two/some/uri/”。该指令

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

将改写这个字符串“地点:http://frontend/one/some/uri/”。

+0

谢谢! Pastafarian: Nginx会使用原始请求来请求新的url吗?因为原始请求是POST请求。 – Zhi

+0

我相信这可能是由于HTTP 1.1。规范。有一个特殊的响应代码'''307''',它应该指示客户端保持原来的方法(比如'''''''''''),但是仍然有几个注意事项。你可以在这里看到关于这个主题的更多信息:http://programmers.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect – pastafarian