字数:1579

需求

在用Axure做原型时,想保留一下历史版本,同时公网作业,于是利用其svn管理功能,但是svn://协议一直有问题,于是想用http方式,在本机用visulsvn搭建没有问题。但是远程ubuntu的主机上如何支持http方式?本篇就是解决这个问题的。

使用过程

(1)之前已经安装过nginx和svnserver,就不重复介绍,用httpwd生成http控制用户和密码也不介绍了。

(2)安装apache
安装apach2:sudo apt install apache2
安装lib:sudo apt install libapache2-svn
重启:sudo /etc/init.d/apache2 restart
访问:crul -X GET http://localhost/,能返回一个html页面
配置dav:sudo vim /etc/apache2/mods-available/dav_svn.conf
在末尾增加配置如下:

<Location /svn>
DAV svn
# 这个是svn库所在目录,里面有很多个库
SVNParentPath /home/ubuntu/program/svn_repository
SVNAdvertiseV2Protocol Off
AuthType Basic
AuthName "Subversion Repository"
# 这个是http验证用户名及密码信息,git也用的这个。注意此用户名和密码同样需要配置到svn库里的conf/passwd中
AuthUserFile /etc/nginx/passwd
# 这个是访问svn库文件权限配置
AuthzSVNAccessFile /home/ubuntu/program/svn_repository/axure/conf/authz
Require valid-user
</Location>

注意:Apache引用的passwd中的用户,要添加到svn库的passwd配置文件,并在authz配置文件中授权repository的相关权限。

附:安装htpasswd就能生成Http Basic Authentication的用户密码,安装方法参考这里,步骤:

  • sudo apt search htpasswd # 查找哪些包含这个工具
  • sudo apt-get install apache2-utils # 安装
  • htpasswd -bdc htpasswd.kibana username password # 生成密钥

(3)让nginx接上apache,在80端口的server里配置以下内容,url中包括svn字样的走反向代理到apache

location ~ /svn(/.*) {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8099;
}

(4)验证 访问 http://roadl.com/svn/axure/ 就能看到之前建的axure工程qindu了,url中,svn是apache/nginx配置的内容,axure是svn repository,它位于/home/tao/svn_repository,这个目录是库合集:

result.png

感谢:进击的菜狗子pkg