例如, 客戶端C向代理P發送請求, 代理P默認將所有請求轉發到服務器S1, ,但某些請求的響應可能是301/302。哪個開源代理服務器可以基於服務器響應進行代理? (HAProxy,Nginx ...)
對於那些301/302響應,是否有任何代理服務器可能根據響應代碼再次將這些請求轉發到服務器S2。
例如, 客戶端C向代理P發送請求, 代理P默認將所有請求轉發到服務器S1, ,但某些請求的響應可能是301/302。哪個開源代理服務器可以基於服務器響應進行代理? (HAProxy,Nginx ...)
對於那些301/302響應,是否有任何代理服務器可能根據響應代碼再次將這些請求轉發到服務器S2。
你可以使用任何Apache的ProxyPassReverse
Apache doc或NGINX proxy_redirect
NGINX doc
的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/」。
謝謝! Pastafarian: Nginx會使用原始請求來請求新的url嗎?因爲原始請求是POST請求。 – Zhi
我相信這可能是由於HTTP 1.1。規範。有一個特殊的響應代碼'''307''',它應該指示客戶端保持原來的方法(比如'''''''''''),但是仍然有幾個注意事項。你可以在這裏看到關於這個主題的更多信息:http://programmers.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect – pastafarian
是否您希望代理指定客戶端應該重定向到的服務器?您可以使用Nginx重新寫入位置標題,以便在它返回到客戶端時重定向到您想要的服務器。 – pastafarian
謝謝Pastafarian: 1.我不想把它退還給客戶。 2.它是一個POST請求,因爲我知道客戶端是否收到301/302響應,它將啓動另一個GET請求。 所以我想知道是否有代理服務器可以基於S1的響應代碼再次代理原始請求? – Zhi
哦,我沒有在原始問題中看到帖子....您可以使用反向代理,但這不僅適用於響應代碼的子集。 – pastafarian