2012-07-25 8 views
8

mam zainstalowanego Jenkins na mój serwer i chcę, aby chronić go z nginx http auth tak, że wnioski do:Protect Jenkins z nginx http auth wyjątkiem zwrotnego url

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

będą chronione wyjątkiem jednej lokalizacji:

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

potrzebne do uruchomienia kompilacji. Jestem trochę nowy w Nginx, więc utknąłem z tym do konfiguracji nginx.

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;  
    } 
} 

Próbowałem smth jak wyżej config ale kiedy odwiedzam http://my_domain.com:8080 nie ma http auth.

+0

Prawie identyczny klon, który działa dobrze dla mnie; nie używasz 8080 zarówno dla upstream, jak i dla nginx w prawdziwej konfiguracji, prawda? – furq

+0

Co masz na myśli w prawdziwej konfiguracji? Jak rozumiem, nginx nie może złapać żądania portu 8080, więc muszę go zablokować zaporą ogniową i tylko żądaniami poddomeny "ci" do x.x.x.x: 8080 – makaroni4

Odpowiedz

7

W końcu zorientowałem się, jak rozwiązać ten problem. Najpierw musimy odznaczyć opcję "Włącz bezpieczeństwo" na stronie Zarządzaj Jenkinsem. Z wyłączonymi zabezpieczeniami możemy uruchamiać nasze zadania z prośbami takimi jak http://ci.your_domain.com/job/job_name/build.

Jeśli chcesz dodać token do adresu URL wyzwalacza, musisz włączyć zabezpieczenia, wybrać "Strategię autoryzacji opartą na projektach" i nadać uprawnienia administratora użytkownikowi anonimowemu. Po nim w Konfiguracja stronie projektu będzie „Wyzwalanie buduje zdalnie” opcja, gdzie można określić żeton więc prośba będzie wyglądać JENKINS_URL/job/onru/build?token=TOKEN_NAME

Więc z bezpieczeństwem niepełnosprawnych musimy chronić http://ci.your_domain.com z nginx http_auth wyjątkiem adresów URL, takich jak /job/job_name/build'.

Oczywiście musimy ukryć port 8080 przed zewnętrznymi żądaniami. Ponieważ mój serwer na Ubuntu mogę używać iptables zapory:

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

Ale! Na ubuntu (nie jestem pewien innych baz linuxowych) iptables znikną po restarcie. Musimy więc je zapisać:

iptables-save 

I to nie koniec. Za pomocą tego polecenia otrzymujemy plik z iptables. Na starcie musimy załadować iptables i najprostszym sposobem jest użycie „uptables-uporczywy” pakiet:

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

Przyjrzyj na iptables jeśli potrzebne https://help.ubuntu.com/community/IptablesHowTo#Saving_iptables Powodzenia Jenkins!

I jest dobrym przykładem na prowadzenie Jenkins na subdomenie serwera: https://wiki.jenkins-ci.org/display/JENKINS/Running+Hudson+behind+Nginx

Powiązane problemy