From my understanding of git, the http/https interface is simple. You have two commands - push and fetch.
Based on a wireshark trace the fetch URL appears to be in this format:
/git/#path-to-repo#/info/refs?service=git-upload-pack The push URLs appear to be in these formats:
/git/#path-to-repo#/info/refs?service=git-receive-pack /git/#path-to-repo#/git-receive-pack I would like to setup nginx configuration so that pushes go to one git backend and fetches come from a different one (the git mirror using gitblit federation).
So I set up a nginx configuration like this:
proxy_cache_bypass $arg_preview; location ~ (.*)git-receive-pack { proxy_pass http://#push-ip#:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto http; proxy_set_header X-Forwarded-Port 80; } location / { proxy_pass http://#pull-ip#:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto http; proxy_set_header X-Forwarded-Port 80; } Whilst this configuration correctly sends /git/#path-to-repo#/git-receive-pack format URLs to the push IP, the /git/#path-to-repo#/info/refs?service=git-receive-pack format URLs still go to the pull IP.
How can I get URLs of the form /git/#path-to-repo#/info/refs?service=git-receive-pack to go to the #push-ip# as well?