SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 10729|回复: 11

[原创] windows下配置基于apache的用http或https进行访问的SVN

[复制链接]
发表于 2010-8-17 15:32:31 | 显示全部楼层 |阅读模式
本帖最后由 yjh4866 于 2011-2-17 16:27 编辑
0 j" P. H. \4 o. ]( K2 J+ m4 K" R4 n8 K9 n9 y
对于svn初学者来经常会遇到配置的问题,下面我介绍一下在windows下配置基于apache用https或者http访问的svn的配置过程,其中的不足还望广大朋友给予指正。
+ Q4 K8 c( F& O, b% \7 [
$ Y4 X6 ^$ u0 A+ Z" Z, ?& g
( K1 B* f# ]3 G' u4 ^在windows下配置基于apache的svn,带openssl0.9.8。可通过http或者https访问,或者只能通过https访问。此文档是配置后根据记忆所写,可能有缺少的地方,还希望广大朋友给予指正。且只适合于自带openssl的apache。
" _- z+ U1 t' m' V( z
$ m* s- n: `6 r% Y( y1 K1 L9 Z4 v9 T4 I9 S9 n. S
2 f0 f1 ?9 d2 n. r% Y( B! j1 @0 O
一、下载和安装
. a0 e# }& S9 y1 L( @5 k) D9 F3 j% i# p
( W+ u- f- Z- X& Q8 O5 A' I5 j. b; I' c' u8 g
& w) Z- M# e( ~9 ~
(一)下载$ }7 P3 }. B; r2 ^3 F

/ K: B, u6 Q; k; D4 r& D6 B4 ]A.服务器端下载$ w& a: }( h  `$ A5 k

9 d$ T' e/ ^& ~7 w& r1、下载apache,在此我下载的是apache-2.2.11-win32-x86-openssl-0.9.8,该版本的apache自带了openssl。
  m+ \( @5 Z  V, R8 e3 ]+ W+ X6 A1 _
3 ^" i. ^! q! {: J% Q: A2、下载subversion,在此配置文档里我用的是1.6.4。可在官网上下载。
# N# E8 u9 y6 L; ^& Q$ n$ c2 h* {, v* ]

! u; `0 e: l, X2 ]! a  J' H: }- w) O% }
B.客户端下载
5 @  R3 B, L! c9 e
/ ]3 p( _* g" _& E! Y6 g( R下载TortoiseSVN,如何希望客户端用汉语的话,可以下载一个对应的语言包,在此文档中用的是TortoiseSVN-1.4.4和LanguagePack-1.4.4。
1 y! `- [6 f/ M& G: C
4 i2 S) m- W9 i& a5 C5 E5 q2 T' M4 m4 [# V  ?

( T7 C7 p0 `2 p1 r& i9 V  x(二)安装
/ q. I  w' K5 v8 @% t
$ E$ X# Q( S- R. y5 m  k1、先安装apache和subversion,再安装TortoiseSVN和LanguagePack。(因为如果服务器端也需要装TortoiseSVN的话,先装了TortoiseSVN再装apache和subversion会导致版本库访问错误。). k9 k! O6 \4 w7 h# [
, Z6 c- X& O( I8 A6 t
2、将TortoiseSVN的语言设置为中文。在桌面上点击右键-setting然后将语言设置为简体中文即可。 / [; ^" D3 `5 T* [' ^3 l# [
# x/ E! L4 @# w7 d' x
二、建配置库及用户名。) p* _7 O3 t) Y3 Y) e1 X( W

0 _0 u) y' R) D0 x. v2 H1、建配置库5 I" V( R( Y: o) w$ X3 v

5 u# D# b1 w4 t, C# @在cmd命令里进入subversion的bin目录,然后输入
# e! y( l' [: Q  e- z2 xsvnadmin create d:\svn\test  R* s  D" L7 p2 {* [' q& R+ B

8 l* N# }3 o. M- _( c7 X, v- u) b' n注:上层目录d:\svn\test必须存在。即在d盘下建svn\test文件夹。0 c* r% N9 W& B- r' N

0 Y: p- n" D$ m9 ~1 d1 G6 `% ^运行此命令即建好一个库。打开之后可看到test空文件中多了些文件。$ n- i9 R1 M' _6 u1 V
  
+ w" D2 X) F( ?2 K2、建用户名。+ [1 Z$ X6 F  d7 L
- n# t4 ^" z* h3 d
将apache设为环境变量,然后在cmd命令里进入我们想要的目录进行建用户名操作。执行以下命令即可。: e' k& Y4 b! o' a4 F/ A

7 z+ q" D  J* D( M  y! i初次建用户名:htpasswd  -c  passwd  username,username对应我们的用户名,然后输入密码即可。& s' B; R/ q7 m, ^8 `) B
( r& D9 y! ?7 f* L
以后建用户名:htpasswd  -m passwd  username1
, a( L% R& K# w9 Z2 G5 g9 @' m3 e" L- V/ H0 y
删除用户:      htpasswd  -D  passwd  username       注:此处必须用大写的D。, K2 i% @  E, w$ L; t% e0 v, I* V+ F

4 {" L, z+ Q- k8 m5 l4 E- R% U三、配置过程
; S0 M! g9 D) H& x  C) ]/ R* W3 v8 x: B, X' J6 `
在此为止,我们已经将客户端及服务器端的软件都安装好了,接下来就是配置过程了。
/ R' q& _" H% D7 ~5 A6 A
/ f* S3 C2 u- `1 u4 d(一)配置可以通过http访问的
8 |# E+ o& Y9 v2 v0 n
9 r# m9 P  l/ K( I7 }6 v1、打开subversion的bin目录,将mod_dav_svn.so,mod_authz_svn.so,libdb44.dll三个文件复制到apache的bin目录里。
" m% \2 h$ g* v, }1 s9 D
1 N- Z9 v8 D' K) V3 ?$ ~; E+ I* v注:如果apache的版本不是2.2.11,libdb44.dll的名字可能就是libdb**.dll。$ b$ D5 R! N* P; T9 h7 A& f! o
! ~. [# l# t* }+ I7 r0 A
2、因为apache和subversion的版本不对应,所以应将subversion的bin目录中的所有的dll文件复制到apache的bin目录里,在复制的过程中,要让apache停止。% q# Q% G1 A  B$ x7 i# \( k& S: r

/ @& ?: m( h+ `5 ?3、打开apache的conf目录里的httpd.conf文件进行修改。1 _1 l( @2 U/ j
(1)在LoadModule部分,首先将以下两行前面的#去掉。
7 B' }  ^' u( e4 }       #LoadModule dav_module modules/mod_dav.so
$ \4 M0 J& W1 M0 x7 g0 v1 Y6 @      #LoadModule dav_fs_module modules/mod_dav_fs.so, @/ m: v0 S1 n  k' Y: X  v

, Z7 h  p, U9 G4 H+ |9 J6 N改为    LoadModule dav_module modules/mod_dav.so
, A* O) i. @/ t4 @& }1 O) M6 k4 Q       LoadModule dav_fs_module modules/mod_dav_fs.so( o" U/ W9 {# C: }) r$ j1 T8 E  b

. ^% ~# Q* q+ B4 S1 s1 i(2) 在LoadModule部分添加以下两句,因为我们前面只是将subversion中的dav_svn.so和authz_svn.so模块复制到apache的modules目录下,但是apache启动后并不会加载它,所以我们添加以下两句,以便让apache会加载这两个模块。
, j9 q( ~6 Y" ?3 L+ I
" e$ r( b# V, ?5 f4 @. Y- u" c- }0 \        LoadModule dav_svn_module modules/mod_dav_svn.so
2 {+ R3 r9 _' c! i3 C' M       LoadModule authz_svn_module modules/mod_authz_svn.so9 n+ F; |5 c+ g! P0 E$ l- t
' d1 |/ s: A  p; e) K' T2 p
(3)在httpd.conf文件的最后添加以下内容(针对多库模式)。
5 o4 ~" m! t! d" b) k
6 S2 N( x7 L! s5 }<Location /repos/>                                 $ X' B+ F- @% d: ]
     DAV svn
5 K( @3 C9 v7 f, T     SVNParentPath "d:\svn"                               # 库的路径。 ( o* e+ r+ x6 k6 F% }  t
     SVNListParentPath on                                  # 查看所有的库(即库列表)
( S+ ]* B* e, M1 h/ `  L, p0 P     AuthType Basic     
, G' ]1 o3 `6 J, d3 K' N5 M7 Q     #SSLRequireSSL                                       #限制项目仓库只能通过https的形式进行访问。   
- Q3 Y4 X6 D9 s" O1 m     AuthName "svn repos" 3 v# D; G/ r' E8 {
     AuthUserFile "D:\svn\passwd"                         #用户名及密码的存放路径,据自己的情况写。 2 H# f" K% \' K$ z( P% \
     AuthzSVNAccessFile "D:\svn\svnaccessfile"             #权限文件的存放路径,根据自己的情况写。6 S3 W) T7 f$ m; I2 _4 U% T; u$ d
     Require valid-user
/ B! E3 o4 q( L" a( Z</Location>
+ E  D7 ^' J5 n1 ]1 @0 V# L
; R" ]2 o# d) m+ o. Q' c到此为止通过http访问的所有的配置都已经完成。给用户权限即可通过http://ip:port/repos/test进行访问。$ h6 E/ R3 Q; F" U
6 b' \+ F  _  S3 K. q' O
注: (1)ip:服务器的IP。
. ]! W9 n) Q- x: d0 G               port:安装apache时我们选择的端口。- N. s+ L+ c4 H2 a  W( E( }' }
               repos:location后面的部分,根据自己的实际情况填写。
8 T/ r5 a3 b# ~1 H               test:库的名称。
/ c" Z; |, ~' o. i! ]       (2)在配置文件httpd.conf中添加内容时一定要注意在英文状态下输入,否则会导致apache启动不了;另外上面#及#后内容一定要去掉。1 y# [. {$ v- ], C5 h' |
9 F1 i! |* p, M- S' ]  l  n
(二)在http可以访问的基础上继续配置,以使配置库可通过https访问或者只能通过https访问。) l( j3 K# f8 c4 x. J4 O

! e: i  Y! R# N打开apache的conf目录里的httpd.conf文件进行修改。
  o2 R7 F# G- D9 `; H4 d        
$ n( V% ?5 o  O" I6 o+ o7 T1、将以下三行的注释去掉,即去掉#。9 B" V9 w. \% Y5 j4 h/ S
        #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so9 x* e+ o, e" O( k$ }, X4 P* S
        #LoadModule ldap_module modules/mod_ldap.so
5 p2 m4 T: Z  B4 m% z        #LoadModule ssl_module modules/mod_ssl.so
' h& Y- B/ b' B/ u$ b% I改为& k% n+ G5 b) m
        LoadModule authnz_ldap_module modules/mod_authnz_ldap.so/ U9 k$ \  O7 E- N! b
        LoadModule ldap_module modules/mod_ldap.so 4 S9 z% p- P5 G7 Y
        LoadModule ssl_module modules/mod_ssl.so
6 T6 h4 J# I, V& I% _# O* y& R9 H! L0 V
2 u  p) r* z( [1 I+ K6 F2、将以下行前面的注释去掉
  M7 P1 o- n* y
: M, J4 {8 W/ Q5 |#Include conf/extra/httpd-ssl.conf
; _" ^7 E: C1 Q7 }& Z3 A6 D
/ ~8 P7 R6 e5 b7 k. s8 X改为Include conf/extra/httpd-ssl.conf" u! `4 _/ p* j. B, @+ L, x

3 H# k, d* \& r) j/ ?  [7 h, T3、如果希望只通过https访问,则应该前面Location部分的#SSLRequireSSL前面的#去掉。没有去掉的话是https和http形式都可以访问。
& l. u2 [* u1 D4 h8 |1 ^" H$ t. h* I- b
4、申请证书
9 v: y* |. k" t8 I* u: c7 O, Y5 ^  S* v' Z7 `& h  x
在cmd命令进入到apache的conf目录,执行以下命令。! B9 K! \9 V7 t. w* W
$ \) W! O% m1 V' a
openssl genrsa -out server.key 1024                                                                                     #生成密钥$ L2 }  d# m) X* K, Y. ^4 z+ {
openssl req -new -key server.key -out server.csr -config .\openssl.cnf                                  #生成server.csr
/ J% }4 L% F8 i( `openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt                     #生成证书. i# {7 V2 Z2 d* v
" o. Q6 x  {4 h0 S/ x% x
生成证书时365是证书的有效期,可根据自己的情况进行填写。以上命令执行完之后会生成server.key ,server.csr,server.crt三个文件。
; Z# t2 r- _' {4 F
7 _9 ^# _2 {8 B' l. |5 E8 ~四、分配权限8 x, ?+ E/ R  J6 {: t% p5 v7 p
7 l0 }  F' Z0 Z( Q6 @- J0 j
在此文档我将权限文件命名为svnaccessfile,在其中添加权限内容。
/ t: M4 ^: k, W. C$ c9 s% E# R! L9 {
. l9 `; X, ~9 [1 M9 o7 O8 r# {内容如下:
* n5 O5 ?& y! h. p. M
7 D; P3 |  Y. o8 b6 q[groups]( h% S  I5 @/ s$ ~
* {& C# W( ?# c+ K$ I6 V6 k3 n$ k
admin = username
: [* @0 U" P! K/ [, adev =
3 A9 W4 u. ~0 D- g4 V......                                             #对应我们所需要的组。
$ ?! H0 i+ ]/ f/ E
/ x5 f" \6 ^" Q! {+ E) L# L  h) S[/]                                               #设置哪些组或用户可以查看库目录(所有的库的一个列表)
. I" `( @/ v. L5 s' V@admin=r         
2 L% S2 I/ U; ^, w; \$ _                         % f. b8 c3 }6 c3 i4 O4 S: Y0 u
[test:/]                                        #给库设置访问权限。
$ _! L4 P! q* u5 n( P9 b@admin =rw
7 Y/ P# U' w& a& w@dev=r8 O$ G2 m! @7 b$ I& I, T$ A8 Q
  o$ O! C% H- b- t/ `) w
[test:/xx/xx]                                #继续细分库的权限。. v' F+ u. A/ q3 ~) i4 e
@admin = rw- a" l5 W( D" o, U/ Y

/ `( C) B; K/ i) @& g  [
( [" z4 n0 [5 |+ f, d. @# c到此为止,所有的配置都已经完成,我们可以通过客户端进行日常工作了。* y* c. R6 ]" z3 e. f* a# E8 o$ I

! v7 U7 p$ z) I: D! H2 H# t由于配置完通过openssl访问后,openssl默认的端口是443,所以访问的链接变为http://ip:443/repos/test,如果想要通过别的端口访问则应该将将conf\extra下中httpd-ssl.conf里所有的443换成自己期望的端口,这样就可以通过自己想要的端口用https访问了,但是注意不要和其他的端口冲突。
) L% ~3 ^8 t) v+ d  b- ?对svn感兴趣或想与更多人交流的朋友可以加群3 u! }7 X2 h- d4 S3 q1 }0 x
svn俱乐部_2:1251943615 o5 Q) l5 C2 Z4 o. F
svn俱乐部_4:44367034
" b( C  }- U+ V; Msvn俱乐部_5:68302447+ A, E8 y8 y5 T$ F) L) U9 V

评分

参与人数 1威望 +8 金钱 +8 收起 理由
go2cxg + 8 + 8 谢谢分享!

查看全部评分

发表于 2010-8-17 21:45:30 | 显示全部楼层
感谢分享
" k8 w+ Z4 [9 R$ E' F0 x& m1 ]  U3 `不错的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-18 21:07:27 | 显示全部楼层

注意

1.如果系统的安全设置的比较高的话apache装完后会出现“no services installed”
3 Z! `* }/ L& p2 G, U$ d' w- K这种情况我们需要进入到apache的bin目录,然后执行
% g6 w2 O* k4 C. vhttpd.exe -k install -n apache2
; O6 P! r$ x3 i, q( t即可启动apache.2 y4 U3 @2 @* e
& d- ]# c! R' ^" B$ Y
2.配置完https的部分后会启动不了apache,提示httpd-ssl.conf的第62行错误,这种情况的话将第62行注释掉就可以正常用了,因为第62行没有指向任何文件,所以可以注释掉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-18 21:18:37 | 显示全部楼层

回复 沙发 的帖子

只是在xp配置通过了,在server系统上配置就出现了上面我说到的那两个问题,呵呵,目前使用正常,如果再出现什么问题会陆续传上来。
回复 支持 反对

使用道具 举报

发表于 2010-8-19 10:50:43 | 显示全部楼层
多交流,多发贴,成长更加快!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-19 12:07:23 | 显示全部楼层

回复 5# 的帖子

嗯,呵呵,谢谢支持!
回复 支持 反对

使用道具 举报

发表于 2010-8-20 15:46:23 | 显示全部楼层
非常好的说明,楼主支持你~~
回复 支持 反对

使用道具 举报

发表于 2010-8-20 16:42:20 | 显示全部楼层
好文章!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-23 17:48:48 | 显示全部楼层

回复 7# 的帖子

呵呵,谢谢支持!呵呵,以后多交流!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-23 17:50:22 | 显示全部楼层

回复 8# 的帖子

呵呵,谢谢来支持,以后有空多多交流哦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2018-4-25 01:22 , Processed in 0.078722 second(s), 7 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表