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

使用Traefik反向代理时Gitea登录页面重定向异常问题

解决Gitea通过Traefik子路径代理时Git Push重定向丢失前缀的问题

问题描述

使用Traefik作为反向代理、Gitea作为Git服务器,按配置完成后,可通过/gitea路径前缀正常访问Gitea服务、克隆仓库,但执行git push -u origin main命令时,系统会重定向至http://{Host}/login/oauth/authorize,而非预期的http://{Host}/gitea/login/oauth/authorize,手动添加/gitea前缀后可正常使用,需修复该重定向异常。

现有配置

docker-compose.yml

...
services:
  traefik:
    image: docker://traefik:latest
    container_name: traefik
    networks:
      - network
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/run/user/1000/podman/podman.sock:/var/run/docker.sock:z"

  gitea:
    image: docker://gitea/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
    volumes:
      - ~/gitea:/data
      - ~/gitea/config:/data/gitea/conf
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    labels:
      - "traefik.http.routers.gitea.rule=PathPrefix(`/gitea`)"
      - "traefik.http.services.gitea.loadbalancer.server.port=3000"
      - "traefik.http.middlewares.gitea-stripprefix.stripprefix.prefixes=/gitea"
      - "traefik.http.routers.gitea.middlewares=gitea-stripprefix"
    ports:
      - "10880:3000"
      - "10022:22"
    networks:
      - network
    depends_on:
      - mysql

Gitea配置文件

RUN_USER = git
WORK_PATH = /data/gitea
RUN_MODE = prod

[repository]
ROOT = /data/gitea/data/gitea-repositories

[server]
SSH_DOMAIN = raspberrypi
DOMAIN = raspberrypi
HTTP_PORT = 3000
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s/gitea/
PROTOCOL = http

解决步骤

问题核心是Gitea未正确识别反向代理传递的子路径前缀,导致生成的OAuth重定向URL缺失/gitea。需通过以下调整修复:

  1. 更新Traefik的Gitea路由配置
    在Gitea服务的Traefik标签中新增一个中间件,给请求添加X-Forwarded-Prefix头,告知Gitea其运行的子路径前缀。修改后的标签如下:

    labels:
      - "traefik.http.routers.gitea.rule=PathPrefix(`/gitea`)"
      - "traefik.http.services.gitea.loadbalancer.server.port=3000"
      - "traefik.http.middlewares.gitea-stripprefix.stripprefix.prefixes=/gitea"
      - "traefik.http.middlewares.gitea-addprefix.headers.customrequestheaders.X-Forwarded-Prefix=/gitea"
      - "traefik.http.routers.gitea.middlewares=gitea-stripprefix,gitea-addprefix"
    
  2. 确认Gitea的ROOT_URL配置
    确保Gitea配置文件中的ROOT_URL已正确包含子路径,当前配置已满足要求:

    [server]
    ROOT_URL = http://raspberrypi/gitea/
    
  3. 重启相关容器
    应用配置修改后,重启Traefik和Gitea容器:

    docker-compose restart traefik gitea
    

原理说明

Traefik的stripprefix中间件会移除/gitea前缀后再转发请求给Gitea,但Gitea默认不知道这个前缀,因此生成的URL会缺失该路径。通过添加X-Forwarded-Prefix头,Gitea能正确识别子路径,从而生成包含/gitea前缀的重定向URL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:50:19