Ubuntu
如何在 Apache 中為個人使用者目錄設置身份驗證?
public_html
我在我的目錄中為我的個人設置了身份驗證home
,但它沒有效果。即,我應該得到一個彈出視窗,詢問我的憑據,但這不會發生。身份驗證適用於伺服器根目錄中的目錄,並且執行正常。現在我正在重組伺服器。這裡有更多細節。有一些與配置文件相關的附帶問題和問題,我用粗體表示。
- 我有主 HTTP 目錄
/var/www/html
和 HTTPS 相同。- 那裡只有一個文件,
index.html
帶有指向我個人~tomas
URL 的連結。它工作正常。我正在使用userdir
mod 進行映射~tomas
。- 我還有一個個人
cgi-bin
目錄,CGI 工作正常,但我希望 URL~tomas/cgi-bin
顯示目錄列表,由於某種原因它不起作用,我得到 403 Forbidden。- 我希望主目錄在 HTTPS 和 HTTP 中都可用並且沒有授權。但是一旦客戶端通過其中一個個人
public_html
目錄請求~user
,訪問應該被驗證並且驗證應該通過 HTTPS 進行。所以HTTP需要切換到HTTPS。我已經設置並測試了 HTTPS 設施,但尚未在此上下文中設置任何強制執行。如果重要,我沒有 FQDN。然而,主要問題是,如何讓身份驗證本身工作
~user
,甚至通過 HTTP。我把所有的配置都放進去
userdir.conf
,我猜問題是在/home/*/public_html
.這是
userdir.conf
.<IfModule mod_userdir.c> UserDir "public_html" UserDir disabled UserDir enabled tomas <Directory "/home/*/public_html"> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Require all granted </Limit> <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept> AuthType Basic AuthName "Personal HTML" AuthUserFile "/usr/share/apache2/passwd/passwords" Require valid-user SSLOptions +StdEnvVars </Directory> <Directory "/home/*/public_html/cgi-bin"> Options ExecCGI Indexes SetHandler cgi-script </Directory> </IfModule> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
如果您對此配置文件或我對 Apache 的一般方法有任何意見,請發表評論。
關鍵是
Limit
指令。線索出現在 mod Apache 文件頁面的Directive部分<Limit>
。core
當與指令一起使用
<Limit>
or<LimitExcept>
指令時Require
,請注意第一個Require
成功的授權請求,無論是否存在其他Require
指令。事實證明,
Require
與手頭的情況相匹配的第一個決定了它的處理方式。使用我的問題中的配置,即:<Limit GET POST OPTIONS> Require all granted </Limit> <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept> AuthType Basic AuthName "Personal HTML" AuthUserFile "/usr/share/apache2/passwd/passwords" Require valid-user
使用一個簡單的 GET 請求,它就是
Require all granted
上面清單的第二行中的內容。它下面的AuthType Basic
行和其他行是死程式碼。正確的方法是:<Limit GET POST OPTIONS> AuthType Basic AuthName "Personal HTML" AuthUserFile "/usr/share/apache2/passwd/passwords" Require valid-user </Limit> <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept>
順便說一句,這是
Limit
指令被忽略的情況。Require all granted <Limit GET POST OPTIONS> AuthType Basic AuthName "Personal HTML" AuthUserFile "/usr/share/apache2/passwd/passwords" Require valid-user </Limit> <LimitExcept GET POST OPTIONS> Require all denied </LimitExcept>
第一行成功並授權請求。