2016-02-22 53 views
6

下面是我Jenkins的nginx配置文件。大部分內容與我在文檔中閱讀的完全一致。Jenkins/Nginx - Double提示進行基本認證,爲什麼?爲什麼有Jenkins內部身份驗證?

配置文件:

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

}

當導航到http://sub.mydomain.net/jenkins我得到提示我與服務器基本身份驗證說:[...]請確認識別...

這是正確的,但只要一個我再次輸入正確的憑據,然後我得到再次提示爲基本身份驗證,但是這一次:服務器說:詹金斯

第二個隱藏的basic_auth來自哪裏?這對我沒有任何意義。

擊中在第一提示CANCEL然後我正確地接收一個401所需授權錯誤。

擊中第二基本身份驗證取消「服務器說:詹金斯」)我得到:

HTTP ERROR 401 

Problem accessing /jenkins/. Reason: 

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

有誰知道這是可能的事?

回答

19

找到解決我的問題,通過搜索Nginx作爲任何其他應用程序與basic_auth反向代理。

液,得到的答案在這裏找到: https://serverfault.com/questions/511846/basic-auth-for-a-tomcat-app-jira-with-nginx-as-reverse-proxy

我是從我的nginx的配置中缺少了該行:

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

默認情況下,看來以後基本身份驗證的Nginx將另外提出了AUTH標題詹金斯,這是什麼導致我的問題。詹金斯收到轉發的驗證標題,然後認爲它也需要自己授權?!

如果我們將反向代理設置爲不轉發任何授權標頭,如上所示,那麼一切正常。 Nginx會提示basic_auth,並且在成功驗證後,我們會在轉發到我們的反向代理時顯式清除(重置?)auth頭。

+1

非常感謝您解決了我的問題。經過數小時的搜索和谷歌搜索... – sh0umik

1

我也有這個問題,在我的情況下,這是由jenkins本身啓用安全性引起的,禁用安全性解決了問題。

根據他們的文檔:

如果你在Apache的訪問控制,不要啓用詹金斯安全性,因爲這兩件事情會互相干擾。

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

什麼似乎是發生的是Nginx的轉發到詹金斯auth_basic響應,它試圖響應執行auth_basic。我還沒有找到令人滿意的解決方案。

+0

感謝您的迴應!正如你將在下面看到的,我發現了我們問題的解決方案,但我認爲你的文檔鏈接可能實際上證明會顯示未來的問題,併爲洞察力而感到高興。在你的文檔鏈接前面寫道:「如果訪問控制需要過於簡單(比如隱藏Jenkins而不是幾個人),那麼這種方法是合適的,但如果你開始進行更復雜的設置,它往往會崩潰。 。「_ - 我們要做什麼?我想允許組織中的人仍然可以訪問Jenkins(通過nginx基本身份驗證),但不能修改它。 –

相關問題