密碼保護 vhost 虛擬文件根目錄
我有以下設置用於自動生成 /etc/apache2/apache2.conf 中配置的子域/虛擬文件根目錄(在 Debian 7.0 上執行)
<VirtualHost *:80> ServerAlias * UseCanonicalName Off VirtualDocumentRoot /home/%2/htdocs/%1 # Setup correct (virtual) document root as $_SERVER['DOCUMENT_ROOT'] for PHP php_admin_value auto_prepend_file /home/jbraun/setdocroot.php <Directory /home/%2/htdocs/%1> Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all DirectoryIndex index.html index.php # These lines don't work AuthType Basic AuthName "HALMA" AuthUserFile /usr/local/apache/passwd/passwords Require valid-user # Commented for testing purposes only # Allow from halma.lan # Satisfy any </Directory> CustomLog ${APACHE_LOG_DIR}/vhost_access.log combined
什麼是有效的,它是關於什麼的
上述配置允許使用者在其
/home/username/htdocs/
目錄下創建子目錄,並通過動態生成的子域在瀏覽器中訪問它們,例如該文件夾/home/jbraun/htdocs/project
可以訪問http://project.jbraun.halma.lan
(halma.lan
本地Intranet名稱在哪裡,相應的DNS已設置並正在執行)。此外,整個故事可以通過 DynDNS 服務在類似的 URL 上訪問,例如project.jbraun.foobar.dyndns.org
來自外部世界。我想要實現但不工作
我想在沒有密碼保護
halma.lan
的情況下從本地網路(或者比方說192.168.2.*
)訪問,而通過 DynDNS URL()來自 WAN 的訪問project.jbraun.foobar.dyndns.org
應該受到密碼保護。因此,我遵循了 Apache 文件並添加了“Auth*”行
AuthType Basic AuthName "HALMA" AuthUserFile /usr/local/apache/passwd/passwords Require valid-user
但不幸的是,什麼也沒發生(是的,我同時重新啟動了 apache)。伺服器的錯誤日誌文件也是靜默的。
當我在我的一些項目 .htaccess 文件中添加相同的行時,一切都按預期工作,所以我認為配置中的 VirtualDocumentRoot 和/或動態生成的文件路徑一定存在一些問題。
有人能指出我正確的方向嗎,我怎麼能做到這一點,或者是否有可能?
提前非常感謝。
$$ EDIT $$
我想發布最終有效的配置,僅供參考和其他搜尋此問題的人:
<VirtualHost *:80> ServerAlias *.*.halma.lan ServerAlias *.*.foobar.dyndns.org UseCanonicalName Off VirtualDocumentRoot /home/%2/htdocs/%1 # Setup correct (virtual) document root as $_SERVER['DOCUMENT_ROOT'] for PHP php_admin_value auto_prepend_file /home/jbraun/setdocroot.php #<Directory /home/%2/htdocs/%1> <Directory ~ "^/home/.*/htdocs/.*/"> Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny DirectoryIndex index.html index.php AuthType Basic AuthName "HALMA" AuthUserFile /usr/local/apache/passwd/passwords Require valid-user Allow from 10.0.0 Satisfy Any </Directory> CustomLog ${APACHE_LOG_DIR}/vhost_access.log combined </VirtualHost>
感謝 HBruijn
我認為可以肯定地說
%1
和%2
擴展只發生在少數支持這種魔法的mod_vhost_alias指令中。這可能是一個範例,其中安全性稍差的
Location
指令可用於包含身份驗證指令,即<Location /> AuthType Basic AuthName "HALMA" AuthUserFile /usr/local/apache/passwd/passwords Require valid-user </Location>
或者,目錄指令也可能包含正則表達式,允許類似:
<Directory ~ "^/home/.*/htdocs/.*/"> </Directory>
您可以通過添加與您的使用者名命名約定匹配的正則表達式來改進它,例如
"^/home/([a-z_][a-z0-9_]{0,30})/htdocs/.*/"