Virtualhost

密碼保護 vhost 虛擬文件根目錄

  • July 16, 2014

我有以下設置用於自動生成 /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.lanhalma.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/.*/"

引用自:https://serverfault.com/questions/612736