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


48

我正在尝试使用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

Answers:


73

您应该将其放置在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>

1
这对我不起作用。<Location /opt/mcmap/shapefiles.php> AuthType Kerberos AuthName KerberosLogin KrbServiceName HTTP/intranet.spectrumasa.com KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/conf/intranet.keytab require valid-user Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all SetOutputFilter DEFLATE </Location>
shorif2000

1
apache doc页面解释了所有这一切,但是令人讨厌的是从来没有给您完整的示例。我复制了他们示例的require valid-user一部分,但是错过了一部分。一个完整的例子可能是一件很棒的事。谢谢。
Buttle Butkus

1
@sharif应该是<Location />,这意味着要访问yourhost.com/的根URL,应要求进行auth配置
agbb 16-03-09

1
<Location />无论如何,我都需要在加载配置文件时不出现语法错误。
英仙座

3
为什么用内部日志消息“已修复...避免了很多麻烦” <Location /><Location>其编辑为,但是在答案本身中却没有真正说明原因?Apache中没有这样的<Location>指令(即没有位置的指令)。现在肯定会造成麻烦。;)(请参见上文。)
Sz。

9

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

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

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

附加到现有文件:

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

7

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

<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>

您还可以添加DenyAllow指令以进行更精细的控制。


4

听起来您是在中指定了身份验证设置VirtualHost。通常,这些设置是在Directory指令下指定的。

您也可以使用.htaccesss文件,但是在Apache conf中指定是一个很好的默认设置,因为它的公开程度较低。

Apache文档


3

我在ubuntu 10.10上运行Apache2。我上面的所有解决方案都遇到了问题,但是效果很好(来自apache docs):

<目录/ var / www />
  选项索引FollowSymLinks多视图
  允许全部覆盖
  订单允许,拒绝
  允许所有人
  AuthType基本
  AuthName“受限制”
  AuthBasicProvider文件
  AuthUserFile / etc / users
  需要用户访问者
</目录>

与上述答案最大的不同似乎是将AuthBasicProvider伪指令设置为“文件”,而Require伪指令包括实际用户名之前的“ user”位。

希望这对某人有帮助。


3

我们正在运行apache的内存优化版本,并遇到了此问题。

这是由于apache配置中没有以下行:

LoadModule authz_user_module modules/mod_authz_user.so
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.