Escolha o Proxy Reverso Correto Via URL Parameter

1

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?

    
por Gareth 20.07.2013 / 21:21

1 resposta

2

OK, isso foi mais fácil do que eu pensava. Acabou de adicionar outra seção entre o primeiro e o segundo bloco de localização:

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;
}
    
por 20.07.2013 / 22:00