2016-02-22 7 views
6

Di seguito è riportato il file di configurazione di nginx per Jenkins. La maggior parte è esattamente come ho letto nella documentazione.Jenkins/Nginx - Doppio messaggio per l'autenticazione di base, perché? Perché c'è un'autenticazione Jenkins interna?

file di configurazione:

upstream app_server { 
    server 127.0.0.1:8080 fail_timeout=0; 
} 

server { 
    listen 80; 
    listen [::]:80 default ipv6only=on; 
    server_name sub.mydomain.net; 

location ^~ /jenkins/ { 

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 

    if (!-f $request_filename) { 
     proxy_pass http://app_server; 
     break; 
    } 

    auth_basic "[....] Please confirm identity..."; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
} 

}

Durante la navigazione verso http://sub.mydomain.net/jenkins ottengo richiamato per la mia autenticazione base con Server dice: [....] Conferma identificare ....

Questo è corretto, ma non appena un io immettere le credenziali appropriate Allora ottengo chiesto nuovamente per autenticazione di base, ancora una volta, ma questa volta: dice Server: Jenkins.

Da dove viene questo secondo basic_auth nascosto ?! Non ha alcun senso per me.

Colpire CANCEL sul primo prompt poi ricevo correttamente l'autorizzazione 401 richiesto errore.

Colpire CANCEL sulla seconda autenticazione di base ("Server dice: Jenkins") ottengo:

HTTP ERROR 401 

Problem accessing /jenkins/. Reason: 

Invalid password/token for user: _____ 
Powered by Jetty:// 

Qualcuno sa cosa sta forse succedendo?

risposta

19

Trovato la soluzione al mio problema cercando Nginx utilizzato come proxy inverso per qualsiasi altra applicazione con basic_auth.

soluzione è stata la risposta trovato qui: https://serverfault.com/questions/511846/basic-auth-for-a-tomcat-app-jira-with-nginx-as-reverse-proxy

La linea mi mancava dalla mia configurazione di nginx è stato:

# Don't forward auth to Tomcat 
proxy_set_header Authorization ""; 

Per impostazione predefinita, sembra che dopo di base autenticazione Nginx sarà inoltre in avanti l'autenticazione intestazioni a Jenkins e questo è ciò che stava portando al mio problema. Jenkins riceve le intestazioni di auth inoltrate e quindi pensa di dover autorizzare anche se stesso ?!

Se impostiamo il nostro proxy inverso per non inoltrare le intestazioni di autorizzazione come mostrato sopra, allora tutto funziona come dovrebbe. Nginx chiederà basic_auth e dopo l'autenticazione riuscita cancelleremo esplicitamente (reset?) Le intestazioni auth quando inoltriamo al nostro reverse proxy.

+1

Grazie mille per aver risolto il mio problema. Dopo ore di ricerche e googling ... – sh0umik

1

Ho riscontrato anche questo problema, nel mio caso è stato causato dall'avere abilitato la sicurezza nello stesso jenkins, la disattivazione della sicurezza ha risolto il problema.

Secondo i loro documenti:

Se fate il controllo degli accessi in Apache, non abilitare la sicurezza in Jenkins, come queste due cose interferiscono uno con l'altro.

https://wiki.jenkins-ci.org/display/JENKINS/Apache+frontend+for+security

cosa sembra accadere è che nginx inoltra la risposta auth_basic a Jenkins, che tenta di eseguire auth_basic in risposta. Non ho ancora trovato una soluzione soddisfacente al problema.

+0

Grazie per la risposta! Come vedrai di seguito, ho trovato la soluzione al nostro problema, ma penso che il tuo link al doc possa effettivamente dimostrare di mostrare problemi futuri e contento per l'intuizione. Precedendo il tuo link doc dice: "Questo approccio è adatto se il controllo dell'accesso è semplice (come nascondere Jenkins da tutti, ma poche persone), ma tende ad abbattere se si inizia a fare un setup più complesso ... . "_ che cosa stiamo andando? Voglio consentire alle persone nell'org di accedere ancora a Jenkins (tramite l'autenticazione di base di nginx), ma non a modificarlo. –

Problemi correlati