Nginx Reverse Proxy vor Jenkins

Das typische Problem ist, dass Jenkins gut abgesichert auf einem externen Server laufen soll, also ein Basic Auth vorgeschaltet werden soll und natürlich sollte auch nur Port 80 in der Firewall (iptables) freigeschaltet werden. Die Lösung ist nicht besonders kompliziert, aber da es meist Anleitungen für den Apache Webserver gibt und generell deutlich weniger Tipps für Nginx, habe ich mich entschlossen dieses vHost Beispiel hier abzulegen:

################################################################################
# JENKINS Nginx vhost
################################################################################

server {

        listen          80;
        server_name     jenkins.example.tld;

        access_log      /var/log/nginx/jenkins_access.log;
        error_log       /var/log/nginx/jenkins_error.log;

        location / {
                auth_basic              "Restricted (J)";
                auth_basic_user_file    /etc/nginx/htpasswd-jenkins;

                proxy_pass              http://localhost:8080;
                proxy_set_header        Authorization   "";
                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_redirect          off;
                proxy_connect_timeout   150;
                proxy_send_timeout      100;
                proxy_read_timeout      100;
                proxy_buffers           4 32k;
                client_max_body_size    8m;
                client_body_buffer_size 128k;
        }
}

Wichtig ist es vor allem bei einer vorgeschalteten Basic Auth diese Header nicht an den Jenkins weiterzureichen – denn meist möchte man genau dort die Jenkins-eigene Authentifizierung zusätzlich nutzen.