针对单个子域的身份验证

针对单个子域的身份验证

我在 Apache 中有一个 VirtualHost,它使用带有通配符的 ServerAlias 来匹配许多子域,如下所示:

<VirtualHost>
    ServerName foo.com
    ServerAlias *.foo.com
</VirtualHost>

有数百个子域与别名匹配,现在我想要针对特定​​子域的身份验证提示:bar.foo.com

人们该如何去做这样的事呢?

我曾经考虑为创建一个新的VirtualHost bar.foo.com,但我最好避免这样做,因为一旦我想添加更多这样的域就会变得麻烦。

答案1

取决于您的目录结构(您的VirtualDocumentRoot目录结构是什么样的?),但对于.htaccess站点目录中的文件来说,这可能是一个好的情况,如下所示:

AuthType Basic
AuthName "bar.foo.com"
AuthUserFile /var/www/bar.foo.com/.htpasswd
Require valid-user

设置.htpasswd 文件:

htpasswd -c /var/www/bar.foo.com/.htpasswd username1
htpasswd /var/www/bar.foo.com/.htpasswd username2
...

如果可能的话,也加密这些流量。基本身份验证是通过 HTTP 以明文形式发送的,因此使用 SSL 加密是个好主意。

答案2

我遇到了同样的问题,刚刚解决了。

假设您有两个 VirtualHosts“open.example.com”和“resticted.example.com”,它们共享文档根目录“/path/to/your/web-root”。您希望人们能够无需密码访问 open.example.com,但访问 restriced.example.com 则需要密码。那么您的配置将如下所示:

<Directory /path/to/your/web-root>

    Order Deny,Allow
    Deny From All

    SetEnvIf Host open.example.com allowed
    Allow from env=allowed 

    AuthType Basic
    AuthName "Won't let you in, if you don't tell me your name and password"
    AuthUserFile /etc/apache2/htusers

    Require valid-user

    Satisfy Any
</Directory>

相关内容