2016-02-22 12 views
6

Dưới đây là tệp cấu hình nginx của tôi cho Jenkins. Hầu hết nó là chính xác như tôi đã đọc trong tài liệu.Jenkins/Nginx - Nhắc đôi cho auth cơ bản, tại sao? Tại sao có một xác thực Jenkins bên trong?

Config file:

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

}

Khi điều hướng đến http://sub.mydomain.net/jenkins tôi nhận được nhắc nhở cho auth cơ bản của tôi với máy chủ nói: [....] Vui lòng xác nhận xác định ....

này là đúng, nhưng trong thời gian sớm một tôi nhập các thông tin thích hợp sau đó tôi nhận được nhắc lần nữa cho auth cơ bản một lần nữa, nhưng lần này: máy chủ nói: Jenkins.

Địa chỉ cơ bản ẩn thứ hai này đến từ đâu ?! Nó không có ý nghĩa gì với tôi.

Nhấn HỦY trên lời nhắc đầu tiên sau đó tôi nhận được yêu cầu 401 yêu cầu cấp phép lỗi.

Hitting CANCEL trên auth cơ bản thứ hai ("Máy chủ nói: Jenkins") tôi nhận được:

HTTP ERROR 401 

Problem accessing /jenkins/. Reason: 

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

Có ai biết chuyện gì có thể xảy ra?

Trả lời

19

Tìm giải pháp cho vấn đề của tôi bằng cách tìm kiếm Nginx được sử dụng làm proxy ngược cho bất kỳ ứng dụng nào khác với basic_auth.

Giải pháp được câu trả lời tìm thấy ở đây: https://serverfault.com/questions/511846/basic-auth-for-a-tomcat-app-jira-with-nginx-as-reverse-proxy

Dòng Tôi đã mất tích từ cấu hình nginx của tôi là:

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

Theo mặc định, dường như sau khi cơ bản auth Nginx sẽ bổ sung mong các auth tiêu đề để Jenkins và đây là những gì đã dẫn đến vấn đề của tôi. Jenkins nhận được các tiêu đề auth chuyển tiếp và sau đó nghĩ rằng nó cần phải cho phép chính nó quá ?!

Nếu chúng tôi đặt proxy ngược lại để không chuyển tiếp bất kỳ tiêu đề ủy quyền nào như được hiển thị ở trên thì mọi thứ hoạt động như bình thường. Nginx sẽ nhắc basic_auth và sau khi auth thành công, chúng ta rõ ràng (reset?) Các tiêu đề auth khi chuyển tiếp đến proxy ngược của chúng ta.

+1

Cảm ơn bạn rất nhiều Điều đó đã giải quyết được vấn đề của tôi. Sau nhiều giờ tìm kiếm và googling ... – sh0umik

1

Tôi cũng gặp vấn đề này, trong trường hợp của tôi, nó được gây ra bởi việc bảo mật được kích hoạt trong chính jenkins, vô hiệu hóa bảo mật đã giải quyết được vấn đề.

Theo tài liệu của họ:

Nếu bạn làm điều khiển truy cập trong Apache, không cho phép an ninh trong Jenkins, như hai điều này sẽ giao thoa với nhau.

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

gì dường như xảy ra là nginx cho phép gửi các phản ứng auth_basic để Jenkins, mà cố gắng để thực hiện auth_basic trong phản ứng. Tôi chưa tìm thấy một giải pháp thỏa mãn cho vấn đề này.

+0

Cảm ơn bạn đã trả lời! Như bạn thấy bên dưới, tôi đã tìm thấy giải pháp cho vấn đề của mình, nhưng tôi nghĩ rằng liên kết tài liệu của bạn thực sự có thể chứng minh để hiển thị các vấn đề trong tương lai và vui mừng cho thông tin chi tiết. Trước liên kết doc của bạn, _ "Cách tiếp cận này là phù hợp nếu nhu cầu kiểm soát truy cập là đơn giản (chẳng hạn như ẩn Jenkins khỏi mọi người trừ một vài người), nhưng nó có xu hướng phá vỡ nếu bạn bắt đầu thiết lập phức tạp hơn ... "_ - chúng ta sẽ làm gì? Tôi muốn cho phép mọi người trong tổ chức vẫn truy cập Jenkins (thông qua xác thực cơ bản nginx), nhưng không sửa đổi nó. –

Các vấn đề liên quan