CentOS 7 安装 Subversion 服务器,请见米扑博客,安装配置步骤非常详细:CentOS 搭建 SVN Server

本文重点介绍搭建完成Subversion 服务器后,如何支持 HTTPS 访问

 

一、支持 HTTP 访问

SVN 支持 http 需要开启 dav 模块,并且配置 dav

1. 开启 dav 相关模块

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so 
LoadModule authz_svn_module modules/mod_authz_svn.so

 

2. 查看 SVN 目录结构

/home/data/SVN          # SVN 根目录

/home/data/SVN/repository    # repo 版本库

tree 目录树查看:

# tree -L 1 /home/data/SVN/repository/
/home/data/SVN/repository/
├── conf
├── dav
├── db
├── format
├── hooks
├── locks
└── README.txt

 

3. 配置文件

vim /usr/local/httpd/conf/httpd.conf

<Location /repository>
    DAV svn
    SVNPath /home/data/SVN/repository/
    AuthType Basic
    AuthName "svn for repository"
    AuthUserFile /home/data/SVN/repository/conf/webpasswd
    AuthzSVNAccessFile /home/data/SVN/repository/conf/authz
    Satisfy all
    Require valid-user
</Location>

 

4. 通过 http 访问

http://svn.domain.com/repository/

 

 

二、支持 HTTPS 访问

httpd 不同版本支持 https 方式不一样,我遇到的两个版本如下:

版本1:

系统环境:CentOS 6.5 + Apache/2.2.27

配置文件 /etc/httpd/conf/httpd.conf 中引入了 Include conf.d/*.conf 所有的配置文件

其中,conf.d/*.conf 配置有如下:

# ll /etc/httpd/conf.d/ 
-rw-r--r-- 1 root root 2699 Jul 30  2011 mod_extract_forwarded.conf
-rw-r--r-- 1 root root 1796 Apr 17  2014 perl.conf
-rw-r--r-- 1 root root 1046 Feb 18  2014 php.conf
-rw-r--r-- 1 root root  566 Dec  6  2005 proxy_ajp.conf
-rw-r--r-- 1 root root  392 Apr  9  2014 README
-rw-r--r-- 1 root root 9639 Jul 21  2015
ssl.conf
-rw-r--r-- 1 root root 1042 Aug 17  2015 subversion.conf
-rw-r--r-- 1 root root 1447 Dec 13  2014 subversion.conf.rpmsave
-rw-r--r-- 1 root root  427 Mar 10  2014 welcome.conf

可见,ssl.conf 通过 Include conf.d/*.conf 引入进来的


版本2:

系统环境:CentOS 7.5 + Apache/2.4.34

配置文件 /usr/local/httpd/conf/httpd.conf 中引入了 Include conf/extra/httpd-ssl.conf 配置文件,可谓是精准引入

为了多介绍下,列出 conf/extra/ 目录下的所有配置文件,需要用到哪个就引入哪个

# ll /usr/local/httpd/conf/extra/
-rw-r--r-- 1 root root  2877 Jul 25 09:21 httpd-autoindex.conf
-rw-r--r-- 1 root root  1807 Jul 25 09:21 httpd-dav.conf
-rw-r--r-- 1 root root  2942 Jul 25 09:21 httpd-default.conf
-rw-r--r-- 1 root root  1119 Jul 25 09:21 httpd-info.conf
-rw-r--r-- 1 root root  5078 Jul 25 09:21 httpd-languages.conf
-rw-r--r-- 1 root root  1391 Jul 25 09:21 httpd-manual.conf
-rw-r--r-- 1 root root  4444 Jul 25 09:21 httpd-mpm.conf
-rw-r--r-- 1 root root  2216 Jul 25 09:21 httpd-multilang-errordoc.conf
-rw-r--r-- 1 root root 13669 Aug 17 16:08
httpd-ssl.conf
-rw-r--r-- 1 root root   694 Jul 25 09:21 httpd-userdir.conf
-rw-r--r-- 1 root root  1463 Jul 25 09:21 httpd-vhosts.conf
-rw-r--r-- 1 root root  3161 Jul 25 09:21 proxy-html.conf

因此,httpd 要支持 https ssl 访问,是需要手动引入 Include conf/extra/httpd-ssl.conf 配置文件,否则无法 https 访问,切记!

 

好了,先在  /usr/local/httpd/conf/httpd.conf 中引入了 Include conf/extra/httpd-ssl.conf 配置文件

svn 版本库服务器支持 https 访问有多种方法,本文将介绍两种方法

方法一:自定义生成 ssl 证书

1、命令生成 ssl 证书文件

cd /etc/pki/tls/private
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
cd /etc/pki/tls/certs
openssl x509 -req -days 365 -in /etc/pki/tls/private/server.csr -signkey /etc/pki/tls/private/server.key -out server.crt

以上步骤,有些信息如实填写,必须在相关文件夹下产生所需的文件,保证输入命令正确,保证产生文件所在文件夹正确

 

2、修改引入的 httpd-ssl.conf 配置文件

vim /usr/local/httpd/conf/extra/httpd-ssl.conf 

直接给出修改后的结果

ErrorLog "/var/log/httpd_ssl_error_log"
TransferLog "/var/log/httpd_ssl_access_log"
LogLevel warn

SSLCertificateFile "/etc/pki/tls/certs/server.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/server.key"

 

3、重启 httpd,访问 https

/etc/init.d/httpd restart

访问 https

https://svn.domain.com/repository/

将会提示出现无法找到 ssl 证书,这是因为浏览器(chrome、firefox、ie)无法找到本地 ssl 证书

 

 

方法二:申请免费 ssl 证书推荐

这里是本文讲述的核心重点,解决 svn 服务器完美支持 https 访问

在腾讯云申请免费的 ssl 证书,或者用免费的 Let’s Encrypt ssl 证书

1、将申请好的 ssl 证书解压,配置到 httpd.conf

vim /usr/local/httpd/conf/httpd.conf

添加如下内容:

# svn 443 for https
<
VirtualHost *:443>
    SSLEngine on
    SSLCertificateChainFile /usr/local/httpd/conf/1_svn_root_bundle.crt
    SSLCertificateFile /usr/local/httpd/conf/2_svn.mimvp.com.crt
    SSLCertificateKeyFile /usr/local/httpd/conf/3_svn.mimvp.com.key

    ServerAdmin yanggang@163.com
    DocumentRoot /usr/local/httpd/htdocs/
svn_tmp
    ServerName svn.mimvp.com
    
    DirectoryIndex index.php index.html index.htm
    ErrorLog /var/log/svn.mimvp.com-error_log
    CustomLog /var/log/svn.mimvp.com-access_log common
</VirtualHost>

可见,在 httpd 根目录下,创建了一个临时的 svn_tmp 文件

并配置了 ssl 443访问

 

2、强制 http 跳转到 https

# svn 80 for http to https
<
VirtualHost *:80>
   
RewriteEngine on
    RewriteCond   %{HTTPS} !=on
    RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

    ServerAdmin yanggang_2050@163.com
    DocumentRoot /usr/local/httpd/htdocs/svn_tmp
    ServerName svn.mimvp.com

    DirectoryIndex index.php index.html index.htm
    ErrorLog /var/log/svn.mimvp.com-error_log
    CustomLog /var/log/svn.mimvp.com-access_log common
</VirtualHost>

 

3、配置 svn dav 支持 http 访问

# svn path only for http
<Location
/repository>
    DAV svn
    SVNPath /home/data/SVN/repository/

    AuthType Basic
    AuthName "svn for repository"
    AuthUserFile /home/data/SVN/repository/conf/webpasswd
    AuthzSVNAccessFile /home/data/SVN/repository/conf/authz
    Satisfy all
    Require valid-user
   
SSLRequireSSL
</Location>

 

4、重启 httpd,访问 https

/etc/init.d/httpd restart

访问 https

https://svn.domain.com/repository/

至此,完美解决了 svn 服务器 支持 https 访问

其实,细想原理很简单, ssl 443 访问临时文件,授权了申请的免费 ssl 证书,然后 svn dav 直接访问 http 强制跳转到了 https,此步骤获取了 ssl 授权

并结合 svn https 访问的是 repository 目录,在已经获得了 ssl 证书授权后,因此一路畅通,完美访问了 https

 

 

参考推荐

CentOS 搭建 SVN Server

Subversion on CentOS

CentOS 搭建SVN Server

CentOS 7.2 / 6.5 系统安装指引

Ubuntu 配置 Apache

Centos7 使用 sendmail 发送邮件