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
私のディストリビューションは、Turnkey Linux Redmineと呼ばれるカスタマイズされたUbuntuです。
これを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>
私はUbuntu 10.04でApache2を実行しています—同じ問題と解決策に感謝します。 /etc/Apache2/Apache2.conf
に構成を配置する必要があることがわかりました
Htpasswdを使用してユーザー名とパスワードを生成できます。新しいファイル:
$ htpasswd -c /srv/auth/.htpasswd squire
既存のファイルに追加するには:
$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2
ロケーションまたはディレクトリを保護できます。ディレクトリの場合、次のようなものを追加します。
<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
ディレクティブを追加することもできます。
VirtualHost
内で認証設定を指定しているようです。通常、これらの設定はDirectory
ディレクティブで指定されます。
.htaccesss
ファイルを使用することもできますが、Apache confでの指定は、露出が少ないため、適切なデフォルトです。
私はUbuntu 10.10でApache2を実行しています。上記のすべてのソリューションで問題が発生しましたが、これはうまくいきました(Apache docsから):
<Directory /var/www/> オプションインデックスFollowSymLinks MultiViews AllowOverride All Order allow、deny allow from all AuthType Basic AuthName "Restricted" AuthBasicProvider file AuthUserFile /etc/users ユーザーの訪問者を必要とする </ Directory>
上記の回答との最大の違いは、「ファイル」に設定されたAuthBasicProviderディレクティブと、実際のユーザー名の前に「ユーザー」ビットを含むRequireディレクティブです。
これが誰かを助けることを願っています。
メモリ最適化バージョンのApacheを実行していて、この問題が発生しました。
これは、Apache構成に次の行がないためです。
LoadModule authz_user_module modules/mod_authz_user.so