如何为Cloud Run上带自定义上下文路径的Vaadin应用配置GCP负载均衡路径匹配
解决Vaadin静态资源在GCP负载均衡下的404问题
方案一:配置GCP负载均衡路径重写
针对Vaadin静态资源的/VAADIN/**请求,通过负载均衡的路径重写自动添加上下文前缀:
- 进入GCP控制台的负载均衡器页面,找到对应的路径匹配器
- 添加新规则:
- 匹配路径:
/VAADIN/** - 目标服务:选择你的Cloud Run应用
- 路径重写设置:将请求路径替换为
/pbuilder/VAADIN/$1($1会保留原路径中/VAADIN/之后的所有内容,比如原请求/VAADIN/css/main.css会被重写为/pbuilder/VAADIN/css/main.css)
- 匹配路径:
- 确保该规则的优先级高于默认规则,避免被其他路径规则拦截
- 保留原有的
/pbuilder/和/pbuilder/*路径规则,保证常规业务请求正常路由
方案二:修改Vaadin应用的静态资源前缀
如果负载均衡配置不便调整,可在应用端让前端直接生成带上下文前缀的资源请求:
- 在Spring Boot的配置文件(
application.properties或application.yml)中添加:
此配置会让Vaadin生成的页面中,所有静态资源的引用路径自动带上vaadin.frontend.url=/pbuilder/VAADIN/pbuilder前缀,负载均衡收到的请求即为/pbuilder/VAADIN/...,直接转发就能匹配应用的上下文路径。 - 确认
server.servlet.context-path=/pbuilder配置已生效,保证应用内部所有路由和资源基于该上下文路径。
验证方式
配置完成后,打开浏览器开发者工具的网络面板,查看静态资源请求:
- 方案一:请求路径显示为
/VAADIN/...,但负载均衡已重写为带前缀的路径转发给服务 - 方案二:请求路径直接显示为
/pbuilder/VAADIN/...,无需负载均衡额外处理
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

