Docker部署pgAdmin4自定义路径访问重定向到根路径如何解决
pgAdmin4 子路径部署重定向到根路径问题修复
问题描述
在Docker容器中部署运行pgAdmin4时,由于默认根路径/下已有其他服务运行,需要将pgAdmin4配置为在自定义路径下提供服务。尝试配置相关环境变量后,pgAdmin4启动后仍会自动重定向到根路径/,导致请求被转发到其他运行的服务。
当前使用的docker-compose配置如下:
pgadmin: restart: always container_name: pgadmin image: dpage/pgadmin4:6.10 environment: - PGADMIN_DEFAULT_EMAIL=someemail - PGADMIN_DEFAULT_PASSWORD=somepassword - PGADMIN_DISABLE_POSTFIX=true #- PGADMIN_ENABLE_TLS=false - PGADMIN_LISTEN_ADDRESS=0.0.0.0 - PGADMIN_LISTEN_PORT=80 - PROXY_X_FOR_COUNT=2 - PROXY_X_PROTO_COUNT=2 - PROXY_X_HOST_COUNT=2 - PROXY_X_PORT_COUNT=2 - PROXY_X_PREFIX_COUNT=2 networks: - databases - nginx labels: - "traefik.enable=true" - "traefik.backend=pgadmin4" - "traefik.frontend.priority=600" - "traefik.frontend.rule=Method:GET" - "traefik.frontend.rule=PathPrefix:/url-secreta/pgadmin"
目标为通过www.mywebsite.com/url-secreta/pgadmin路径访问pgAdmin4,目前已经在Kong网关完成了路由配置,但请求到达pgAdmin服务后就会被重定向到/路径。
解决方案
问题核心是缺少pgAdmin自身的子路径挂载配置,同时代理规则存在配置错误,按以下步骤修改即可:
- 添加核心应用根路径配置
在environment配置块中新增PGADMIN_CONFIG_APPLICATION_ROOT参数,明确告知pgAdmin服务自身挂载的子路径:
注意:路径必须以斜杠开头,结尾不能加斜杠,否则会触发重定向死循环- PGADMIN_CONFIG_APPLICATION_ROOT='/url-secreta/pgadmin' - 修正代理头匹配规则
你当前配置的PROXY_X_*_COUNT=2参数,仅在客户端到pgAdmin之间存在2层反向代理时生效。如果你的链路中只有Kong一层代理(或者Kong+Traefik共2层代理则保持2不变),需要将对应COUNT值调整为实际代理层数,否则pgAdmin会读取到错误的X-Forwarded-*头值。
同时需要确保Kong网关转发请求时,正确携带X-Forwarded-Prefix: /url-secreta/pgadmin请求头。 - 修正Traefik路由规则
你当前配置了两条traefik.frontend.rule,后写入的规则会覆盖前一条,需要将规则合并,且不要配置路径剥离(pgAdmin已经通过APPLICATION_ROOT识别子路径,剥离前缀会导致服务收到无路径的请求触发重定向),修正后配置为:- "traefik.frontend.rule=Method:GET;PathPrefix:/url-secreta/pgadmin" - 可选静态资源配置
如果修改后访问出现静态资源404问题,新增静态资源路径配置即可:- PGADMIN_CONFIG_STATIC_URL_PATH='/url-secreta/pgadmin/static/'
所有配置修改完成后,重启pgAdmin容器,清空浏览器缓存即可通过目标子路径正常访问,不会再重定向到根路径。
内容的提问来源于stack exchange,提问作者Rafael Lima
相关产品推荐
相关产品推荐

