我正在尝试使用 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 指令在实际用户名之前包含“用户”位。
希望这对某人有帮助。