Come eseguire il lavoro di push git con nginx (auth di base) dietro il proxy inversa nginx (HTTPS)?

Mi piace avere un server git su un computer (backend) senza accesso diretto a Internet. Dovrebbe esserci un'authentication di base. L'accesso dovrebbe essere disponibile tramite un proxy inverso (frontend) su un altro computer, che fa SSL / HTTPS. Entrambi esegue Debian 7 stabile (wheezy + wheezy-backports per nginx e git).

Finora tutto (= git clone ) funziona ma git push :

  • Nginx esegue blocchi di posizione multipli
  • Grandi repositori (hg o git)
  • Nginx + PHP 5.3.3 (con php-fpm) - utilizzo della memory?
  • Shellshock: Come faccio a sapere se il mio server è compromesso + file sospetti per cercare
  • nginx & php-fpm 11: Risorsa temporaneamente non disponibile
  • Quali diritti di accesso potrebbero bloccare l'accesso a un repository gitlab?
  •  $ git push --set-upstream origin master Username for 'https://myfrontend:443': myusername Password for 'https://myusername@myfrontend:443': error: Cannot access URL https://myserver:443/git/gittest.git/, return code 22 fatal: git-http-push failed 

    Il messaggio di errore nel registro nginx backend è:

     2014/04/01 01:00:00 [error] 27000#0: *7 no user/password was provided for basic authentication, client: myfrontend, server: mybackend, request: "PROPFIND /git/gittest.git/ HTTP/1.0", host: "myfrontend" 

    Sembra che l'autore di base funziona per il clone , ma non per la push .

    La configuration nginx del frontend è:

     server { listen 443; server_name myfrontend; resolver 127.0.0.1; charset UTF-8; # root /var/www/; index index.html; # ssl on; ssl_certificate /etc/ssl/certs/myfronted.crt; ssl_certificate_key /etc/ssl/private/myfrontend.key; # ssl_session_timeout 5m; # ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; ssl_prefer_server_ciphers on; # location ~ /git(/.*) { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass http://mybackend:8081/git$1; proxy_set_header X-Forwarded-Proto https; proxy_set_header REMOTE_USER $remote_user; } } 

    La configuration nginx per il backend è:

     server { listen 8081; server_name mybackend; root /var/www; charset UTF-8; # location ~ /git(/.*) { auth_basic "Restricted"; auth_basic_user_file /var/lib/git/.htpasswd; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; create_full_put_path on; # fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/lib/git; fastcgi_param PATH_INFO $1; fastcgi_param DOCUMENT_ROOT /usr/lib/git-core/; fastcgi_pass unix:/var/run/fcgiwrap.socket; include fastcgi_params; } } 

    Il config git sul server backend è:

     [core] repositoryformatversion = 0 filemode = true bare = true [http] receivepack = true [gitweb] owner = My Name 

    C'è un altro, forse un modo più semplice per servire git sul lato di backend? Forse senza nginx o senza fcgiwrap? Vorrei tuttavia sopravvivere senza Apache …

    Molte grazie in anticipo!

  • etckeeper, checkout Git e le autorizzazioni di file interrotte in / etc
  • È `che 'mentire a me?
  • push impegna a git (gitolite) repository messes up permessi di file (nessun accesso trac più)
  • Git spinge http (utilizzando git-http-backend) e Apache non funziona
  • Strategie di distribuzione multi-server - Git sui server di produzione?
  • L'authentication per il git spinge oltre http
  • One Solution collect form web for “Come eseguire il lavoro di push git con nginx (auth di base) dietro il proxy inversa nginx (HTTPS)?”

    Il problema era nella syntax frontend. Ho dovuto cambiare:

     proxy_pass http://mybackend:8081/git$1; 

    al corretto:

     proxy_pass http://mybackend:8081/git$1$is_args$args; 

    o in alternativa:

     proxy_pass http://mybackend:8081$request_uri; 

    Grazie, Will!

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.