推送大文件时Gitea Git-LFS出现HTTP 413错误的解决求助
首先非常理解你作为新手遇到这个问题的困惑,我们一步步来排查和解决:
1. 补全Apache SSL虚拟主机的请求体大小限制
你在80端口的虚拟主机里设置了LimitRequestBody 0(表示不限制请求体大小),但实际使用的HTTPS(443端口)的虚拟主机里没有添加这个配置,这很可能是导致413错误的核心原因。
修改你的Apache SSL代理配置,在<VirtualHost *:443>块内添加LimitRequestBody 0:
<IfModule mod_ssl.c> <VirtualHost *:443> <Directory /> SSLRenegBufferSize 2147483647 </Directory> ServerName git.example.com ProxyPreserveHost On ProxyRequests off # 添加这一行,取消请求体大小限制 LimitRequestBody 0 ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ SSLCertificateFile /etc/letsencrypt/live/git.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/git.example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
修改后重启Apache服务生效:
sudo systemctl restart apache2
2. 调整Apache请求超时配置(避免大文件上传超时中断)
大文件上传需要更长的传输时间,Apache的mod_reqtimeout模块可能会因为超时中断请求。你可以在Apache的全局配置(比如/etc/apache2/apache2.conf)或者当前虚拟主机配置里添加以下参数:
RequestReadTimeout header=60 body=3600,MinRate=1024
header=60:允许60秒的时间接收请求头body=3600:允许最长3600秒(1小时)接收请求体MinRate=1024:要求上传速率至少为1KB/s,避免连接因闲置被断开
添加后同样重启Apache:
sudo systemctl restart apache2
3. 确认Gitea配置已生效并重启服务
你已经在Gitea的app.ini里调大了LFS和文件上传的限制,但需要确保Gitea服务已经加载了新的配置:
sudo systemctl restart gitea
可以查看Gitea日志确认LFS配置是否正确加载,执行:
sudo tail -f /var/lib/gitea/log/gitea.log | grep LFS
如果看到类似LFS server enabled以及对应最大文件大小的日志,说明配置已生效。
4. 检查系统级别的文件大小限制
Linux系统可能对用户进程有文件大小限制,需要确保git用户没有这方面的限制:
- 查看当前git用户的限制:
sudo -u git ulimit -a
找到file size这一项,如果显示的不是unlimited,需要修改限制配置。
- 编辑
/etc/security/limits.conf文件:
sudo nano /etc/security/limits.conf
添加以下两行:
git soft fsize unlimited git hard fsize unlimited
保存退出后,重启系统或者切换到git用户(执行sudo -u git bash),再次用ulimit -a确认限制已取消。
5. 检查Git LFS客户端配置(可选)
虽然报错是服务器端的HTTP413,但也可以确认本地客户端没有额外限制:
查看本地仓库的.git/config或者全局的~/.gitconfig,如果有lfs.maxpushsize项,确保它的值足够大(或者直接删除该限制条目)。
完成以上步骤后,再尝试推送大文件,应该可以解决HTTP413的问题。
内容的提问来源于stack exchange,提问作者Tali




