You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Envoy正向代理示例配置的404路由报错问题?

解决Envoy正向代理404错误的方案

1. 先修正curl命令的写法

你用的curl --proxy 0.0.0.0:10000 https://www.example.org:443里,https://www.example.org:443的写法会让Envoy在解析请求目标时出现异常——因为443是HTTPS的默认端口,curl通过代理发送HTTPS请求时,不需要显式在URL里加这个端口。正确的命令应该是:

curl -x 0.0.0.0:10000 https://www.example.org

如果确实需要指定非标准端口,再保留端口号,但默认端口情况下去掉即可避免路径匹配问题。

2. 检查Envoy配置的几个关键环节

路由规则是否匹配所有请求

确保你的路由配置里,匹配规则覆盖所有路径,并且关联到动态正向代理的集群。比如官方示例里的路由应该是:

routes:
- match:
    prefix: "/"
  route:
    cluster: dynamic_forward_proxy_cluster
    timeout: 0s
    upgrade_configs:
    - upgrade_type: websocket

这里的prefix: "/"必须存在,不能改成更窄的路径匹配,否则会导致部分请求无法匹配路由。

动态集群配置是否正确

确认集群配置启用了动态DNS解析,核心部分如下:

clusters:
- name: dynamic_forward_proxy_cluster
  connect_timeout: 0.25s
  lb_policy: CLUSTER_PROVIDED
  cluster_type:
    name: envoy.clusters.dynamic_forward_proxy
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.clusters.dynamic_forward_proxy.v3.ClusterConfig
      dns_cache_config:
        name: dynamic_forward_proxy_cache_config
        dns_lookup_family: V4_ONLY

如果这里的cluster_type配置错误,Envoy无法动态创建目标集群,就会出现路由匹配失败的404。

HTTP过滤器顺序是否正确

dynamic_forward_proxy过滤器必须放在router过滤器之前,因为它需要先处理请求的目标主机,再由router转发。正确的过滤器链应该是:

http_filters:
- name: envoy.filters.http.dynamic_forward_proxy
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.filters.http.dynamic_forward_proxy.v3.FilterConfig
    dns_cache_config:
      name: dynamic_forward_proxy_cache_config
      dns_lookup_family: V4_ONLY
- name: envoy.filters.http.router
  typed_config: {}

如果顺序反了,router会先尝试匹配静态路由,找不到就返回404。

3. 调试排查(如果以上步骤无效)

开启Envoy的debug日志(在配置中设置log_level: debug),查看请求处理过程的日志,重点关注:

  • 请求的目标主机是否被正确解析
  • 路由匹配的过程是否找到对应的动态集群
  • DNS缓存是否成功解析了目标域名

通过日志可以定位到具体是路由匹配失败,还是DNS解析的问题。

内容的提问来源于stack exchange,提问作者Edgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:35:21