背景
前端由React
构建。
后端使用Envoy
作为流量网关,listeners
的路由部分配置如下:
route_config:
name: admin
virtual_hosts:
- name: admin
domains: ["admin.example.com"]
routes:
- match:
prefix: "/"
route:
cluster: admin
Envoy
将下游请求代理到由Go
编写的HTTP
服务器,服务器内部路由的处理如下:
func main() {
fs := http.FileServer(http.Dir("/path/to/build"))
http.Handle("/", fs)
if e := http.ListenAndServe(":80", nil); e != nil {
panic(e)
}
}
问题
只要带路径,刷新浏览器就报404。
疑惑
我知道是因为React Router
的原因,也知道服务器为Nginx
或者httpd
时的解决方案。
但通过Envoy
➕Go
部署时,Envoy
的prefix
已经将所有路径的请求代理给了Go
,而Go
的http.Handle
也已经将所有路径的请求都一律返回静态文件,不论客户端实际请求的是什么路径,不应该都是得到静态文件吗?怎么会得到404呢?
想不通,跪求大佬指教,抱拳。
修改
HTTP
服务器路由处理逻辑,问题解决。