Насколько я понимаю git, интерфейс http / https прост. У вас есть две команды - push и fetch.
На основе трассировки WireShark URL-адрес выборки выглядит в следующем формате:
/git/#path-to-repo#/info/refs?service=git-upload-pack
URL-адреса push выглядят в следующих форматах:
/git/#path-to-repo#/info/refs?service=git-receive-pack
/git/#path-to-repo#/git-receive-pack
Я хотел бы настроить конфигурацию nginx так, чтобы нажатия направлялись на один бэкэнд git, а выборки исходили из другого (зеркало git с использованием федерации gitblit).
Итак, я настроил конфигурацию nginx следующим образом:
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;
}
Хотя эта конфигурация правильно отправляет URL-адреса в формате / git / # path-to-repo # / git-receive-pack на push-IP, / git / # path-to-repo # / info / refs? Service = git-receive- URL-адреса формата pack по-прежнему отправляются на опрашивающий IP.
Как я могу получить URL-адреса вида / git / # path-to-repo # / info / refs? Service = git-receive-pack, чтобы также перейти к # push-ip #?
Хорошо, это было проще, чем я думал. Просто добавил еще один раздел между первым и вторым блоком местоположения:
location ~ (.*)\/refs {
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;
if ($arg_service = "git-receive-pack") {
proxy_pass http://#push-ip#:8080;
break;
}
proxy_pass http://#pull-ip#:8080;
}