2010-03-07 117 views
0

據我所知,Nginx只能在配置文件中密碼保護目錄。這工作得很好,但不是爲最終用戶提供真正的選擇誰 A)不能編輯CONFIGS和 B)將打破CONFIGS如果他們能NGINX:允許用戶自己密碼保護目錄?

現在我想的基於Web的表示他們可以指向並點擊的目錄結構 - 重寫配置並重新終止 - HUP-ing Nginx ... 但不知何故,整個想法感覺就像我即將重寫cPanel v0.0.1 ;-)

任何人這裏有同樣的問題,並提出了一個優雅和可維護的解決方案? 我完全控制了服務器。

謝謝!

回答

3

你不是真的想讓用戶改變配置,是嗎? 對於密碼保護,如果領域始終保持不變,則htpasswd文件就足夠了。 而nginx本身可以檢查文件existense。 所以,這是可以做的工作:對我來說

 
    location ~ ^/([^/]*)/(.*) { 
     if (-f $document_root/$1/.htpasswd) { 
       error_page 599 = @auth; 
       return 599; 
     } 
    } 
    location @auth { 
     auth_basic "Password-protected"; 
     auth_basic_user_file $document_root/$1/.htpasswd; 
    } 

作品nginx的-0.7.65。 0.6.x和更早版本可能不會去

+0

/location不匹配。如果根中的.htpasswd應該觸發認證請求,則將「if -f」條件放入其中。匹配/是一個壞主意,因爲它幾乎總是被請求的最多,並且匹配是nginx所做的最後一件事情,除了與常規位置相比匹配不能快。 – rzab 2010-03-10 11:16:55

+0

謝謝Rzab!我正確理解這隻會在root下的.htpasswd文件中起作用嗎?那麼/first/second/.htpasswd將不會被捕獲?另外 - 你有這種實施的速度懲罰的經驗嗎?我始終明白Nginx沒有實現整個.ht特性的原因是爲了獲得速度? – MattW 2010-03-16 10:01:16

+0

哎唷!可能分心了。位置應該是「〜*^/(。*)/(。*)」,用於err,second和level的匹配。 在查找某個特定請求中對nginx所做的事情時,速度應該不那麼糟糕。 當位置匹配時,檢查.htpassword文件可能會很昂貴。 基本上,如果你不需要密碼保護/,你很好。 聲明「location = /」,這是明智的做法。 聲明您不希望受密碼保護的其他位置(比如說/ rss)。 這是我會做的。但是,不,我沒有機會在製作中使用這個技巧。 – rzab 2010-03-16 14:38:11