Do meu entendimento do git, a interface http / https é simples. Você tem dois comandos - push e fetch.
Com base em um rastreio wireshark, o URL de busca parece estar neste formato:
/git/#path-to-repo#/info/refs?service=git-upload-pack
Os URLs de envio parecem estar nestes formatos:
/git/#path-to-repo#/info/refs?service=git-receive-pack
/git/#path-to-repo#/git-receive-pack
Eu gostaria de configurar o nginx de modo que os pushes acessem um backend do git e os buscamentos venham de um diferente (o git mirror usando a federação do gitblit).
Então eu configurei uma configuração nginx assim:
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;
}
Embora esta configuração envie corretamente os URLs de formato / git / # caminho-para-repo # / git-receive-pack para o push IP, o / git / # caminho-para-repo # / info / refs? service = git URLs de formato de pacote de recebimento ainda vão para o IP de recebimento.
Como posso obter URLs do formulário / git / # caminho-a-repo # / info / refs? service = git-receive-pack para ir para o # push-ip # também?