DOCS/journey/troubleshooting/250907_gitea_https_clone_failure.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

3.3 KiB

Gitea HTTPS 클론 실패 - TLS 패킷 디코딩 오류

작성일: 2025-09-07

작성자: happybell80

환경: Ubuntu 22.04, Gitea 1.23.8 (최신: 1.24.5), nginx HTTP/2

문제 증상

HTTPS를 통한 Git 클론 시 TLS 패킷 디코딩 오류로 실패

에러 메시지

# HTTP/2 사용 시
error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly: INTERNAL_ERROR (err 2)
error: 497 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet

# HTTP/1.1 강제 사용 시
error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet.
error: 663 bytes of body are still expected

검증 과정

1. 서비스 상태 확인

systemctl status gitea  # Active (running) - 1개월 이상 정상 운영
ss -tlnp | grep 3000    # 포트 정상 리스닝
curl -I https://git.ro-being.com  # HTTP/2 200 정상 응답

2. 클론 테스트

# 서버 내부에서도 동일 오류 발생
git clone https://git.ro-being.com/happybell80/company-x_hompage.git
# HTTP/1.1 강제해도 실패
git -c http.version=HTTP/1.1 clone https://git.ro-being.com/...

원인 분석

  1. GnuTLS 라이브러리 문제: Ubuntu Git이 GnuTLS 사용, TLS 패킷 처리 중 오류
  2. Gitea Git 프로토콜 처리: 대용량 데이터 스트리밍 중 버퍼 문제 추정
  3. HTTP/2 멀티플렉싱: 스트림이 정상 종료되지 않음 (INTERNAL_ERROR)
  4. 작은 저장소도 실패: 4.5MB 크기에도 발생 → 프로토콜 레벨 이슈

해결 방법

즉시 해결 (권장)

SSH 프로토콜 사용으로 우회 (포트 51123 사용)

# SSH 키 설정 후
GIT_SSH_COMMAND="ssh -p 51123" git clone git@git.ro-being.com:happybell80/company-x_hompage.git

임시 해결

  1. Gitea 서비스 재시작
sudo systemctl restart gitea
  1. nginx HTTP/2 비활성화 (성능 저하)
# /etc/nginx/sites-enabled/default
listen 443 ssl;  # http2 제거

근본 해결

  1. nginx 설정 최적화
    • client_max_body_size 512M 이상 설정
    • proxy 버퍼 크기 증가
  2. Git 버퍼 크기 증가
    git config http.postBuffer 524288000  # 500MB
    
  3. Gitea 설정에서 LFS 크기 증가
# /etc/gitea/app.ini
[server]
LFS_MAX_FILE_SIZE = 10485760

관련 이슈

  • Gitea Issue #10838: HTTP/2 PROTOCOL_ERROR (파일 크기 문제로 확인)
  • nginx client_max_body_size 제한이 주요 원인
  • Git GnuTLS vs OpenSSL 호환성 문제

실제 해결 과정 (2025-09-07 21:56)

SSH 포트 발견 및 성공

# 기본 22번 포트 연결 실패
ssh -p 22 git@git.ro-being.com  # Connection timed out

# 51123 포트로 시도 → 성공!
ssh -i ~/.ssh/gitea_key -p 51123 git@git.ro-being.com  # 연결 성공

# 51123 포트로 클론 성공
GIT_SSH_COMMAND="ssh -i ~/.ssh/gitea_key -p 51123" \
  git clone git@git.ro-being.com:happybell80/company-x_hompage.git

핵심 교훈

  • Gitea SSH 포트가 51123으로 변경되어 있었음 (보안상 22번 차단)
  • HTTPS 클론 문제는 여전히 미해결 → SSH 51123 포트 사용 필수

결론

SSH 프로토콜 사용이 가장 안정적이며, HTTPS 클론은 nginx/Git 버퍼 설정 조정으로 해결 가능 중요: SSH 포트는 51123 사용 **상태: SSH 우회로 해결됨 (HTTPS는 미해결)