[Git] error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 해결하기

http 프로토콜을 이용해 git push를 할 때, 다음과 같은 에러가 발생했다.

error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Everything up-to-date

위와 같은 에러가 발생하는 이유는 기본적으로 git push를 할 때, http 프로토콜을 통해 처리할 수 있는 파일의 크기가 한도를 벗어났기 때문이다. 이런 문제는 Git에서 처리 가능한 http 프로토콜 버퍼 크기의 기본 값이 작거나 서버에서 처리 가능한 body size가 작기 때문에 발생한다. 이에 대한 해결 방법은 아래와 같다.


http 프로토콜 버퍼 크기 조절하기

서비스형 Git 저장소(Github/Gitlab)를 사용하는 경우에는 보통 이 방법으로 해결된다. 터미널에 아래와 같은 명령어를 입력해 주면 된다.

// 해당 Repository에만 적용
git config http.postBuffer 52428800

// Global 적용
git config --global http.postBuffer 52428800

프록시 웹 서버 body size 조절하기

설치형 Git 저장소(Gitlab/Gitea)를 사용하는 경우에는 위의 http 프로토콜 버퍼 크기 조절로 해결되지 않는 경우가 많다. 그 이유는 설치형 Git 저장소를 사용하기 위해 설치한 웹 서버에서 처리 가능한 body의 기본 크기 너무 작아서 발생하는 문제일 가능성이 높기 때문이다. 당연히 웹 서버에서 처리 가능한 body 크기가 작으니 Git http 프로토콜의 버퍼를 늘려봐야 소용이 없다. 이 경우에는 웹 서버가 수용 가능한 body의 크기를 늘려주면 된다.

Nginx를 사용하는 경우에는 client_max_body_size 크기를 설정해주면 되고, Apache2를 사용하는 경우에는 LimitRequestBody 크기를 설정해주면 된다.

Nginx

server {
	...
    location / {
        ...
        client_max_body_size 50M;
    }
}

Apache2

<Directory "/var/www/html/git">
    LimitRequestBody 52428800
</Directory>

SSH/GIT 프로토콜 이용하기

위의 방법으로 해결되지 않는 경우 http 프로토콜 대신 SSH 혹은 GIT 프로토콜을 이용해 push 해보자. 근본적으로 해당 에러는 http 프로토콜을 사용할 때 발생하는 것이므로 다른 프로토콜을 사용하면 해결될 가능성이 있다.