簡體   English   中英

nginx 和 auth_basic

[英]nginx and auth_basic

我正在嘗試在 Ubuntu Jaunty 中使用 nginx 進行基本身份驗證。 在 nginx.conf 中,我在服務器上下文下添加了這兩行:

server {
   ...
   auth_basic "Restricted Access";
   auth_basic_user_file /etc/nginx/.htpasswd;
   ...
}

然后我 apt-get'ed apache2-utils 來獲取 htpasswd,我用它來創建 htpasswd 文件:

htpasswd -d -c /etc/nginx/.htpasswd joe

當我嘗試訪問該站點時,身份驗證對話框按預期出現,但是當我輸入用戶名和密碼時,它只是刷新了對話框。 它似乎不喜歡我提供的密碼。 我嘗試使用和不使用 -d 選項運行 htpasswd,但仍然沒有運氣。 它拒絕進行身份驗證。 任何想法我做錯了什么?

任何幫助,將不勝感激。

我要檢查的事情:

  • `/ etc / nginx / .htpasswd`的權限 - 運行nginx的帳戶可以讀取文件嗎? 您可以暫時嘗試使用`chmod 644`來確保每個人都可以閱讀它。 如果這樣可行,那么你可以整理出`chown`和`chmod`設置的適當組合,這樣nginx和你/ root就可以讀取它,但是其他用戶不能(為了安全)。
  • 確保`htpasswd`以正確的形式生成哈希; 它通常是大約13個字母數字字符(例如`username:wu.miGq / e3nro`)。 命令CAN也生成MD5哈希值,看起來更像是`username:$ apr1 $ hzB2K ... $ b87zlCYMKufOxn9ol5QV4 /`這些不適用於nginx。
  • 查看增加nginx的調試輸出並檢查錯誤日志以獲取線索。

舊線程,但沒有答案,並在谷歌上很好地引用。

如果您收到此錯誤並嘗試了其他建議,請檢查.htpasswd文件的父文件夾的權限:nginx用戶(默認情況下為www-data)應具有讀取和執行權限(這為我修復了它)。

另一個陷阱我遇到了bash。 我沒有通過提示輸入密碼,而是使用htpasswd-b選項在線輸入密碼。

$ htpasswd -nb admin test123$secure

我無法理解為什么我一直遇到密碼不匹配錯誤,嘗試不同的加密算法。 我用curl驗證它有效:

$ curl -u admin:test123$secure https://example.com

最后,問題通過echo揭示出來

$ echo test123$secure
test123

我犯了一個錯誤,在bash中使用了一個dolar符號($) ,它被解釋為一個空變量,從而省略了其他所有內容。 這可以通過刪除-b選項並僅使用提示輸入密碼來避免。

nginx 將 401 響應識別為注銷,確保您的站點沒有返回 401 並再次重定向,它將陷入無限登錄循環,登錄 -> 401 -> 注銷 -> 重定向到同一頁面 -> 重復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM