Назад | Перейти на главную страницу

Защита паролем виртуального корневого документа 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 по аналогичным URL-адресам, например project.jbraun.foobar.dyndns.org из внешнего мира.

Чего хочу добиться, а не получается

Я хотел бы иметь доступ из локальной сети (halma.lan или скажем 192.168.2.*) без защиты паролем при доступе из WAN через URL-адрес DynDNS (project.jbraun.foobar.dyndns.org) должен быть защищен паролем.

Таким образом, я следил за документами 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 и %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/.*/"