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

TortoiseGit克隆Gogs仓库遇HTTP认证401错误,求解决方案

解决Nginx auth_basic导致TortoiseGit克隆Gogs仓库401的问题

你的问题核心在于Nginx的全局auth_basic认证和Gogs自身的Git HTTP认证发生了冲突。TortoiseGit这类Git客户端无法同时处理两层HTTP认证(Nginx一层,Gogs一层),所以会持续返回401未授权错误。下面是具体的解决方案:

核心思路

让Nginx只对Gogs的Web界面请求启用auth_basic保护,而对Git操作相关的路径(也就是克隆、推送等用到的.git结尾路径)跳过Nginx的认证,直接让Gogs处理自己的Git权限验证。

修改后的Nginx配置

替换你当前的server块配置为以下内容:

server {
    listen 80;
    listen [::]:80;
    server_name ex.ample.com;

    # 匹配所有Git操作相关的路径(以.git结尾),跳过Nginx认证
    location ~* \.git$ {
        proxy_pass http://localhost:3000;
        # 设置必要的代理头,确保Gogs能正确识别请求来源
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 对Gogs Web界面启用Nginx的auth_basic保护
    location / {
        auth_basic "Restricted Content";
        auth_basic_user_file /var/www/gogs/.htpasswd;
        proxy_pass http://localhost:3000/;
        # 同样设置代理头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

配置说明

  1. Git路径匹配:用location ~* \.git$匹配所有以.git结尾的请求,这些请求都是Git客户端(比如TortoiseGit)发起的克隆、拉取、推送操作,直接转发给Gogs,不经过Nginx的auth_basic验证。
  2. Web界面保护:剩下的所有请求(也就是Gogs的网页端)依然通过Nginx的auth_basic进行访问限制,保证Web界面的安全性。
  3. 代理头设置:添加proxy_set_header是为了让Gogs能正确获取客户端的真实IP和请求协议,避免后续操作出现异常。

后续操作

修改配置后,重启Nginx服务:

sudo systemctl restart nginx

然后用TortoiseGit克隆仓库时,直接使用http://ex.ample.com/user/repo.git作为地址,在弹出的认证窗口输入你的Gogs用户名和密码(如果Gogs启用了令牌认证,也可以用令牌代替密码),就能正常克隆了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:38:34