2012-07-25 13 views
8

he instalado Jenkins en mi servidor y quiero protegida con Nginx HTTP de autenticación para que las peticiones a:Proteja Jenkins con Nginx HTTP auth excepto URL de devolución de llamada

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

será protegida, excepto un solo lugar:

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

necesarios para desencadenar compilación. Soy un poco nuevo en nginx, así que me quedé con la configuración nginx para eso.

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

Me trataron como Smth configuración anterior, pero cuando vuelva a http://my_domain.com:8080 no hay autenticación HTTP.

+0

un clon casi idéntica de que funciona bien para mí; no estás usando 8080 tanto para el upstream como para el nginx en la configuración real, ¿o sí? – furq

+0

¿Qué quieres decir con configuración real? Como entiendo, nginx no puede capturar la solicitud del puerto 8080, así que necesito bloquearla con firewall y solo solicitudes de subdominios proxy ci a x.x.x.x: 8080 – makaroni4

Respuesta

7

Finalmente me di cuenta de cómo resolver este problema. Al principio, debemos desmarcar la opción "Habilitar seguridad" en la página Administrar Jenkins. Con la seguridad deshabilitada, podemos activar nuestros trabajos con solicitudes como http://ci.your_domain.com/job/job_name/build.

Si desea agregar un token para activar la URL, debemos habilitar la seguridad, seleccionar "Estrategia de autorización de matriz basada en proyectos" y otorgar derechos de administración al usuario anónimo. Después de que en Configurar página de su proyecto será "Trigger construye de forma remota" opción en la que puede especificar señal para que su solicitud se verá como JENKINS_URL/job/onru/build?token=TOKEN_NAME

Así que con seguridad deshabilitada necesitamos proteger http://ci.your_domain.com con Nginx http_auth excepto URLs como /job/job_name/build'.

Y, por supuesto, necesitamos ocultar el puerto 8080 de las solicitudes externas. Desde mi servidor está en Ubuntu puedo usar iptables cortafuegos:

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

Pero! En ubuntu (no estoy seguro acerca de otros osos Linux), iptables desaparecerá después de reiniciar. Así que tenemos que guardarlos con:

iptables-save 

Y no es el final. Con este comando, obtenemos un archivo con iptables. En el arranque necesitamos cargar iptables y de la forma más sencilla es utilizar el paquete 'uptables-persistente':

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

Tome una mirada más cercana a iptables si es necesario https://help.ubuntu.com/community/IptablesHowTo#Saving_iptables y buena suerte con Jenkins!

Y no es buen ejemplo para el funcionamiento de Jenkins en un subdominio de su servidor: https://wiki.jenkins-ci.org/display/JENKINS/Running+Hudson+behind+Nginx

Cuestiones relacionadas