如何在 Apache httpd 虚拟主机中配置基本身份验证?

如何在 Apache httpd 虚拟主机中配置基本身份验证?

我正在尝试使用 Apache http 配置 mercurial 访问。它需要身份验证。我的/etc/apache2/sites-enabled/mercurial如下所示:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

我在网上读到的每个教程都告诉我插入以下几行:

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

但是当我这样做时出现以下错误:

# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here

我的发行版是一个定制的 Ubuntu,名为 Turnkey Linux Redmine

答案1

您应该将其放在 Location 指令内:

<VirtualHost *:8080>

<Location /> #the / has to be there, otherwise Apache startup fails
            Deny from all
            #Allow from (You may set IP here / to access without password)
            AuthUserFile /usr/local/etc/httpd/users
            AuthName authorization
            AuthType Basic
            Satisfy Any # (or all, if IPs specified and require IP + pass)
                        # any means neither ip nor pass
            require valid-user
</Location>
...
</VirtualHost>

答案2

我在 ubuntu 10.04 上运行 Apache2 — 同样的问题,感谢您的解决方案。我发现我必须将配置放入/etc/apache2/apache2.conf

您可以使用 htpasswd 生成用户名和密码。新文件:

$ htpasswd -c /srv/auth/.htpasswd squire

附加到现有文件:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2

答案3

您可以保护位置或目录。对于目录,添加如下内容:

<Directory /some/dir/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName 'Private scripts'
    AuthUserFile '/some/other/dir/.htpasswd'
    Require valid-user
</Directory>

您还可以添加Deny指令Allow以实现更精细的控制。

答案4

我在 ubuntu 10.10 上运行 Apache2。上面的所有解决方案都存在问题,但这个方法很有效(来自 apache 文档):

<目录 /var/www/>
  选项索引 FollowSymLinks MultiViews
  允许覆盖全部
  命令允许、拒绝
  允许所有人
  AuthType 基本版
  AuthName“受限”
  AuthBasicProvider 文件
  授权用户文件 /etc/users
  需要用户访问者
</目录>

与上述答案最大的区别似乎是将 AuthBasicProvider 指令设置为“文件”,并且 Require 指令在实际用户名之前包含“用户”位。

希望这对某人有帮助。

相关内容