2008年2月20日水曜日

公開リポジトリと非公開リポジトリ

akioさんに教えていただいた Alias が悪さしてるかもしれない件のテストをしようと思いApacheをいじってみた。

別件でいろいろはまってしまって、結局そこまでたどり着けなかった。
別件のほうは解決したので、メモとして残しておく。

今回サーバー内の svn 用のauthzファイルを書き換えた。
全リポジトリ読み込み可、書き込みは権限者のみだったのだけれども、あるリポジトリの匿名読み込みをとめたかった。

[/]
* = r
@user = rw


[repo1:/]
* = r
@user = rw

[repo2:/]
@user = rw
* =

[repo3:/]
@user = rw
* = r


最初に authz をこのように書き換えたところ、repo2 へのアクセスが 403 になってしまった。もちろん repo1 と repo3には read アクセス可能。

ここで、そもそも認証画面が出てこないことが問題だと気づけばすぐに分かったのだけれども・・・


最終的には、以下のように書いて解決。


<Location /svn>
DAV svn
SVNParentPath /path/to/svn/
AuthzSVNAccessFile /path/to/authz
AuthType Digest
AuthName svn
AuthUserFile "/path/to/passwd"

#<LimitExcept GET PROPFIND OPTIONS REPORT>
# require valid-user
#</LimitExcept>

</Location>
<LocationMatch "/svn/repo2">
require valid-user
</LocationMatch>


/svn 以下には認証をかけない
ただし、/svn/以下のディレクトリで、repo1 / repo2 以外のディレクトリは必ず認証をする。
正規表現にしたのは基本設定として認証が必要としたかったから。

↑正規表現間違ってた・・・

よく考えれば当たり前で、1時間も悩んだ原因がこれかと思うと泣けてくる・・・


しっかりした構成をするのであれば、公開と非公開はサーバーを分けたほうがいいだろうし、せめてディレクトリくらい分けようかなぁとおもったけど、めんどくさいのでやめた。


あ、最初から分けてれば悩むことなかったのか・・・orz

apache の設定と svn の設定とどちらもしないといけないのは面倒なので、どちらかだけで何とかなる方法ないかなぁ・・・