Назад | Перейти на главную страницу

Выберите правильный обратный прокси через параметр URL

Насколько я понимаю 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;
}