密码保护 vhost 虚拟文档根目录

密码保护 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是本地内联网名称,相应的 DNS 已设置并正在运行) 访问。此外,整个故事都可以通过 DynDNS 服务在与project.jbraun.foobar.dyndns.org外界类似的 URL 上访问。

我想要实现但未实现的目标

我希望从本地网络(halma.lan或比方说192.168.2.*)进行访问时不受密码保护,而通过 DynDNS URL(project.jbraun.foobar.dyndns.org)从 WAN 进行的访问应该受到密码保护。

因此我按照 Apache 文档添加了“Auth*”行

       AuthType Basic
       AuthName "HALMA"
       AuthUserFile /usr/local/apache/passwd/passwords
       Require valid-user

但不幸的是,什么也没发生(是的,在此期间我重启了 apache)。服务器的错误日志文件也没有动静。

当我在我的某些项目的 .htaccess 文件中添加相同的行时,一切都按预期工作,因此我认为配置中的 VirtualDocumentRoot 和/或动态生成的文件路径一定存在一些问题。

有人可以给我指出正确的方向吗,我该如何实现这一点,或者是否有可能实现这一点?

提前致谢。

* [编辑] *

我想发布最终有效的配置,仅供参考和其他搜索此问题的人使用:

    <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

我认为可以肯定地说,%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/.*/"

相关内容