2012-07-25 11 views
8

ho installato Jenkins sul mio server e voglio protetta con nginx http autenticazione in modo che le richieste a:Proteggere Jenkins con nginx http autenticazione tranne url richiamata

http://my_domain.com:8080 
http://ci.my_domain.com 

saranno protetti tranne una posizione:

http://ci.my_domain.com/job/my_job/build 

necessario per attivare la build. Sono un po 'nuovo a nginx quindi mi sono bloccato con nginx per questo.

upstream jenkins { 
    server 127.0.0.1:8080; 
} 

server { 
    listen x.x.x.x:8080; 
    server_name *.*; 

    location '/' { 
    proxy_pass http://jenkins; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 

    auth_basic "Restricted"; 
    auth_basic_user_file /path/.htpasswd;  
    } 
} 

ho cercato smth come sopra config ma quando visito http://my_domain.com:8080 non c'è autenticazione http.

+0

Un clone quasi identica che funziona bene per me; non stai usando 8080 sia per upstream che per nginx nella configurazione reale, vero? – furq

+0

Cosa intendi in configurazione reale? Come ho capito nginx non può catturare la richiesta di porta 8080 quindi ho bisogno di bloccarlo con il firewall e solo le richieste di sottodominio proxy ci a x.x.x.x: 8080 – makaroni4

risposta

7

Finalmente ho capito come risolvere questo problema. Per prima cosa è necessario deselezionare l'opzione "Abilita sicurezza" nella pagina Gestisci Jenkins. Con la sicurezza disabilitata possiamo attivare i nostri lavori con richieste come http://ci.your_domain.com/job/job_name/build.

Se si desidera aggiungere token all'URL di attivazione, è necessario abilitare la sicurezza, scegliere "Strategia di autorizzazione della matrice basata su progetto" e assegnare i diritti di amministratore all'utente anonimo. Dopo che in Configurare la pagina del progetto sarà "Trigger costruisce a distanza" l'opzione che consente di specificare gettone modo la vostra richiesta sarà simile JENKINS_URL/job/onru/build?token=TOKEN_NAME

Così con disabile di sicurezza abbiamo bisogno di proteggere http://ci.your_domain.com con nginx http_auth tranne gli URL come /job/job_name/build'.

E ovviamente dobbiamo nascondere la porta 8080 da richieste esterne. Dal momento che il mio server è su Ubuntu posso usare iptables firewall:

iptables -A INPUT -p tcp --dport 8080 -s localhost -j ACCEPT 
iptables -A INPUT -p tcp --dport 8080 -j DROP 

Ma! Su ubuntu (non sono sicuro delle altre odi di Linux) iptables scomparirà dopo il riavvio. Quindi dobbiamo salvarli con:

iptables-save 

E non è la fine. Con questo comando otteniamo semplicemente un file con iptables. All'avvio abbiamo bisogno di caricare iptables e il modo più semplice è quello di utilizzare il pacchetto 'uptables-persistente':

sudo apt-get install iptables-persistent 
iptables-save > /etc/iptables/rules 

Date un'occhiata più da vicino a iptables, se necessario https://help.ubuntu.com/community/IptablesHowTo#Saving_iptables e buona fortuna con Jenkins!

E c'è buon esempio per l'esecuzione di Jenkins sul sottodominio del server: https://wiki.jenkins-ci.org/display/JENKINS/Running+Hudson+behind+Nginx