Git 서비스 Nginx 설정¶
Git 서비스(GitLab, Gitea, HTTP 기반 Git)를 제공하기 위한 Nginx 설정 기준 정의함.
Git 서비스에 필요한 항목만 추가 또는 override함.
1. 적용 대상¶
- GitLab / Gitea / 기타 HTTP 기반 Git 서비스
git.example.com형태의 전용 도메인 사용 권장- 업로드(push) 및 장시간 연결 발생 전제
2. Git 서비스 특성¶
git push시 업로드 요청 body 크기가 커질 수 있음git clone / pull시 응답 시간이 길어질 수 있음- HTTP Keep-Alive 및 HTTP/1.1 동작 안정성 중요함
3. 서비스별 필수 설정¶
3.1 업로드 크기 제한¶
Git 서비스는 일반 API / Web 대비 큰 요청이 발생할 수 있음.
client_max_body_size 200m;
- 대형 저장소 push 고려 시 200m 이상 조정 가능함
- 무제한(
0) 설정은 권장하지 않음
3.2 프록시 프로토콜 및 연결 유지¶
Git HTTP 동작 안정성을 위해 HTTP/1.1 및 Connection 헤더 처리 필요함.
proxy_http_version 1.1;
proxy_set_header Connection "";
3.3 표준 Forwarded 헤더¶
Backend에서 URL, 프로토콜, 클라이언트 IP를 정확히 인식하도록 헤더 전달 필요함.
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;
4. 권장 server 설정 예시¶
아래 예시는 Git 서비스 전용 도메인 기준임.
Backend 주소는 환경에 맞게 수정함.
server {
listen 443 ssl;
server_name git.example.com;
client_max_body_size 200m;
location / {
proxy_pass http://GIT_BACKEND_UPSTREAM;
proxy_http_version 1.1;
proxy_set_header Connection "";
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;
}
}
5. 권장 upstream 구성 예시¶
단일 backend 또는 다중 backend 구성 가능함.
upstream GIT_BACKEND_UPSTREAM {
server 192.168.0.215:8080;
keepalive 32;
}
- GitLab / Gitea 실제 포트에 맞춰 조정 필요함
- upstream keepalive는 선택 사항임
6. 운영 점검 항목¶
- push 시 413 오류 발생하면
client_max_body_size상향 필요함 - 장시간 작업 중 504 / 502 오류 발생 시 timeout 정책 점검 필요함
(Global timeout 정책 적용 전제)
7. Git 트래픽 특성 및 rate / connection limit 적용 기준¶
Git 서비스 트래픽은 일반 Web/API 트래픽과 성격이 다르므로
rate limit 및 connection limit 적용 시 주의 필요함.
7.1 Git 트래픽 특성¶
- 요청 빈도는 상대적으로 낮음
- 연결 수는 순간적으로 증가할 수 있음
- 연결 유지 시간이 김
- 한 사용자당 동시에 여러 연결이 발생할 수 있음
(clone, fetch, pack 전송 과정에서 다중 연결 사용)
이러한 특성으로 인해 Git 서비스에서는
요청 수 제한보다 연결 유지 안정성이 더 중요함.
7.2 rate / connection limit 적용 원칙¶
- rate limit / connection limit은 Git 트래픽 특성을 고려하여 신중히 적용함
- 일반 Web/API 기준의 제한 설정을 그대로 적용하지 않음
- 과도한
limit_conn,limit_req설정은 다음 문제를 유발할 수 있음git push중 pack 전송 실패git clone / fetch중RPC failed오류 발생- 사용자 체감상 간헐적 장애로 인식됨
7.3 일반적인 권장 수치 예시 (참고)¶
아래 수치는 절대값이 아닌 참고 예시임.
# connection limit 예시
limit_conn conn_limit 20;
# rate limit은 Git 서비스에서는 일반적으로 비활성화 권장
# limit_req는 적용하지 않거나 매우 완화된 값 사용
- 사용자 수가 적은 내부 Git 서버 기준 예시임
- 외부 공개 Git 서비스에는 더 높은 값 필요함
7.4 상황별 적용 예시¶
1) 사내 전용 Git 서버 (사용자 수 적음)¶
- 목적: 실수 또는 비정상 클라이언트로 인한 과도한 연결 방지
- 권장 방향:
limit_conn: 10 ~ 20 수준limit_req: 적용하지 않음
2) 사내 + 외부 협력사 Git 서버¶
- 목적: 악의적 트래픽 최소 방어
- 권장 방향:
limit_conn: 20 ~ 50 수준- IP 기반 제한 또는 인증 정책 병행
limit_req: 적용 시 매우 완화된 값 사용
3) 대규모 조직 또는 CI 연동 Git 서버¶
- 목적: 자동화 도구(CI, Bot) 안정성 보장
- 권장 방향:
limit_conn: 높게 설정하거나 미적용- CI/Bot 전용 IP 분리 후 별도 정책 적용
- rate limit 사용 지양
8. 정리¶
- Git 서비스에서 limit 설정은 보안보다 안정성 영향이 큼
- “막기 위한 제한”이 아니라 “깨지지 않기 위한 제한”으로 접근함
- 구체적인 운영 수치는 조직의 트래픽/보안 정책 문서에서 최종 확정함