描述:
通过virtual_service向上游请求Istio(1.0.6)代理。服务正在使用标头newuri响应,httpStatus代码即307 - 我知道重定向应该由设计302和位置标头工作。但我想根据http错误进行重定向处理。我尝试使用带有lua的envoyFilters,但所有功能都与流处理(请求/响应头mod)有关,而不是重写或请求转发。
所以请求路径如下所示:
谢谢
如果您有预定义的上游主机列表,您可以考虑查看Envoy Retry plugin。此机制允许您确定可以与某些特定重试条件Hosts predicates相关联的retry_on
列表:即,在特定的HTTP错误代码上;和重试系列num_retries
的数量,因此在reattempts达到重试次数后,Envoy重试策略将从retry_host_predicate
中定义的列表中选择下一个主机。
{
"retry_on": "...",
"num_retries": "{...}",
"per_try_timeout": "{...}",
"retry_priority": "{...}",
"retry_host_predicate": [],
"host_selection_retry_max_attempts": "...",
"retriable_status_codes": []
}
在其他情况下,当您的重定向主机事先不知道时,最好找到一种方法如何在应用程序级别应用适当的逻辑,因为大多数HTTP代理的设计方式是同步执行响应处理程序,即响应处理程序正在运行,不会在同一个线程中安排其他任何内容。只要响应处理程序仅处理已在内存中的数据而不等待远程服务,这就没问题。但是,如果您从响应处理程序发出网络请求,则整个线程将被阻止,并且在远程服务回复之前不会执行任何操作,这会导致性能下降。