RedisInsight结合Traefik使用PathPrefix路径前缀无法正常访问求助
解决Traefik反向代理RedisInsight配置PathPrefix后无法访问的问题
问题根源
从访问日志能看出,主页面请求/redisui可正常转发到RedisInsight,但页面加载的静态资源(如/js/bundle.runtime.min.js)均以根路径/开头,未携带/redisui前缀。Traefik没有匹配这些根路径请求的路由规则,返回404导致页面空白。本质是RedisInsight默认以根路径运行,不知道自己被部署在/redisui子路径下,前端资源引用路径硬编码为根路径。
解决方案
1. 让RedisInsight识别子路径
给RedisInsight服务添加环境变量,指定其运行的base路径为/redisui,让前端生成的资源URL自动带上该前缀。
2. 调整Traefik配置
无需再使用StripPrefix中间件,RedisInsight现在可直接处理带/redisui前缀的请求。
修改后的docker-compose.yml配置
redis: image: redis/redis-stack environment: ALLOW_EMPTY_PASSWORD: yes REDISINSIGHT_REDIS_UI_PATH: /redisui # 指定RedisInsight运行的base路径 volumes: - redis:/data expose: - 6379 ports: - 8001:8001 labels: traefik.enable: true # HTTP路由,重定向到HTTPS traefik.http.routers.redis-ui-http.rule: Host(`${HOST}`) && PathPrefix(`/redisui`) traefik.http.routers.redis-ui-http.entrypoints: web traefik.http.routers.redis-ui-http.service: redis-ui-http traefik.http.services.redis-ui-http.loadbalancer.server.port: 8001 traefik.http.routers.redis-ui-http.middlewares: redis-ui-http-redirectscheme traefik.http.middlewares.redis-ui-http-redirectscheme.redirectscheme.scheme: https # HTTPS路由 traefik.http.routers.redis-ui-https.rule: Host(`${HOST}`) && PathPrefix(`/redisui`) traefik.http.routers.redis-ui-https.entrypoints: websecure traefik.http.routers.redis-ui-https.service: redis-ui-https traefik.http.services.redis-ui-https.loadbalancer.server.port: 8001 traefik.http.routers.redis-ui-https.tls: true networks: - proxy
验证
重启服务后访问https://xxxxxx/redisui,此时页面加载的静态资源URL会变为/redisui/js/xxx,Traefik的PathPrefix规则能匹配这些请求并转发给RedisInsight,页面即可正常显示。
内容的提问来源于stack exchange,提问作者caoool
相关产品推荐
相关产品推荐

