threads / discuss / 41459

Please document git-http-backend/Apache timeout interactions

Subject: Please document git-http-backend/Apache timeout interactions

## tl;dr

3 messages between Feb 21, 2016 and Feb 21, 2016.

replies: 2people: 2as markdown or json

Steinar H. Gunderson· Feb 21, 2016, 22:17 UTC · lore
Hi,

I am running git-http-backend behind Apache as suggested in git-http-backend(1). However, what it fails to mention is that git-fetch-pack seemingly can be very slow in sending its request. Consequently, mod_reqtimeout (on by default, as I understand it) kicks in as an anti-DoS measure, and the user sees a 408 (timeout) error.

Seemingly the simplest fix is to turn off mod_reqtimeout in the vhost serving git (potentially with some <IfModule> around it):

   RequestReadTimeout header=0 body=0
Would you consider adding this to the documentation?
Thanks!
/* Steinar */
-- 
Homepage: https://www.sesse.net/
Junio C Hamano· Feb 21, 2016, 23:29 UTC · re: Steinar H. Gunderson · lore

Re: Please document git-http-backend/Apache timeout interactions

"Steinar H. Gunderson" <sgunderson@bigfoot.com> writes:
Show 13 quoted lines
> I am running git-http-backend behind Apache as suggested in
> git-http-backend(1). However, what it fails to mention is that
> git-fetch-pack seemingly can be very slow in sending its request.
> Consequently, mod_reqtimeout (on by default, as I understand it)
> kicks in as an anti-DoS measure, and the user sees a 408 (timeout)
> error.
>
> Seemingly the simplest fix is to turn off mod_reqtimeout in the vhost
> serving git (potentially with some <IfModule> around it):
>
>    RequestReadTimeout header=0 body=0
>
> Would you consider adding this to the documentation?

This feels 70% like "how to configure your Apache server when you run site that is contacted by a client that is slow to talk?", that is not necessarily specific to Git.

Also while it may make sense to tweak the timeout on the server side, recommending to disable it altogether, instead of adjusting to the typical requirement for a sane client, feels just wrong.

Also, are all requests from one client slow to start, or are only some phases in the protocol exchange slow but not others? If the server side can tell which ones could be normally slow, selectively loosening timeouts only for them might be more palatable, but I am sensing that you are not suggesting such an approach.

For these reasons, I am on the fence.
Steinar H. Gunderson· Feb 21, 2016, 23:34 UTC · re: Junio C Hamano · lore

Re: Please document git-http-backend/Apache timeout interactions

On Sun, Feb 21, 2016 at 03:29:56PM -0800, Junio C Hamano wrote:
> This feels 70% like "how to configure your Apache server when you
> run site that is contacted by a client that is slow to talk?", that
> is not necessarily specific to Git.

It's specific to Git in the sense that Git seemingly as a normal matter of course posts very slowly to /git-upload-pack. Normal HTTP clients don't work this way; they typically have their entire POST body ready before they decide to make a request.

> Also while it may make sense to tweak the timeout on the server
> side, recommending to disable it altogether, instead of adjusting to
> the typical requirement for a sane client, feels just wrong.
True, although I have no idea what the right limits would be.
Show 5 quoted lines
> Also, are all requests from one client slow to start, or are only
> some phases in the protocol exchange slow but not others?  If the
> server side can tell which ones could be normally slow, selectively
> loosening timeouts only for them might be more palatable, but I am
> sensing that you are not suggesting such an approach.

I know only of /git-upload-pack having this pattern, and it is the only one I am seeing 408 errors for in my logs. It seems to fail very rarely (~0.2% of all /git-upload-pack requests), but for some users, it's seemingly very persistent.

/* Steinar */
-- 
Homepage: https://www.sesse.net/

← back to recent threads