默认端口
SVN 服务器主要有两种运行模式,它们使用的默认端口是不同的:

a) Subversion (SVN) 协议 (通过 svnserve)
这是 SVN 原生的、也是最简单的协议。
- 默认端口:
3690 - 协议类型: 自定义的 TCP 协议,通常直接写作
svn://。 - 示例:
svn://your-server-ip/svn/project_repo
这是最常被问到和使用的默认端口。
b) Apache HTTP Server (通过 mod_dav_svn)
这种模式将 SVN 作为 Apache 的一个模块来运行,可以利用 Apache 的所有功能,如 HTTPS、认证、URL 重写等。
- 默认端口:
80(HTTP) 或443(HTTPS) - 协议类型: HTTP/HTTPS,URL 通常以
http://或https://开头。 - 示例:
http://your-server-ip/svn/project_repohttps://your-server-domain.com/svn/project_repo
在这种模式下,SVN 服务本身并不直接监听一个独立的端口,而是由 Apache 服务器在标准的 HTTP/HTTPS 端口上来处理 SVN 请求。

如何修改 SVN 服务器端口?
修改端口的方法取决于你使用的是哪种运行模式。
a) 修改 svnserve 的端口 (原生协议)
svnserve 通常作为系统服务(通过 systemd 或 init.d)或独立进程运行。
通过配置文件 (/etc/sysconfig/svnserve)
这是在 CentOS/RHEL 等发行版上推荐的方法。

-
打开配置文件:
sudo vi /etc/sysconfig/svnserve
-
找到
OPTIONS这一行,修改或添加--listen-port参数,将端口改为4890:# 原始内容 # OPTIONS="-r /var/svn" # 修改后 OPTIONS="-r /var/svn --listen-port 4890"
-
保存并退出文件。
-
重启
svnserve服务使新配置生效:sudo systemctl restart svnserve # 或者 sudo service svnserve restart
直接启动 svnserve (非服务方式)
如果你是手动在后台启动 svnserve,可以在命令行中直接指定端口:
svnserve -d -r /path/to/repos --listen-port 4890
-d: 后台守护进程模式。-r: 指定仓库的根目录。--listen-port 4890: 指定监听端口为4890。
通过 systemd 服务文件
如果你的系统使用 systemd,svnserve 是通过 systemctl 安装的,你可能需要修改其服务单元文件。
- 编辑服务文件:
sudo systemctl edit svnserve.service
- 在
[Service]段落下添加Environment变量:[Service] Environment="SVNSERVE_PORT=4890"
- 保存并退出,然后重新加载并重启服务:
sudo systemctl daemon-reload sudo systemctl restart svnserve
(注意:这种方式需要
svnserve程序能够识别这个环境变量,通常官方的svnserve不支持,所以第一种方法更通用。)
b) 修改 Apache 的端口 (HTTP/HTTPS 协议)
Apache 的端口配置在主配置文件或站点配置文件中,通常位于 /etc/httpd/conf/httpd.conf 或 /etc/apache2/sites-enabled/ 目录下。
-
修改 HTTP 端口 (80): 找到
Listen指令并修改它。# 默认 Listen 80 # 修改为 8080 Listen 8080
-
修改 HTTPS 端口 (443): 找到
Listen 443指令并修改。# 默认 Listen 443 # 修改为 8443 Listen 8443
-
重启 Apache 服务:
# 对于 CentOS/RHEL 7+ sudo systemctl restart httpd # 对于 Debian/Ubuntu sudo systemctl restart apache2
重要提示: 修改了 Apache 的端口后,客户端访问 SVN 仓库时也需要使用新的端口号,http://your-server-ip:8080/svn/project_repo。
如何检查 SVN 服务器端口状态?
你可以使用 netstat 或 ss 命令来检查 SVN 服务是否在预期的端口上监听。
使用 ss 命令 (推荐,更快)
# 查看所有监听的 TCP 端口,并显示进程ID和名称 sudo ss -tulpn | grep -E 'svn|3690|80|443'
-t: TCP 端口-u: UDP 端口-l: 只显示监听的端口-p: 显示进程ID和名称-n: 以数字形式显示地址和端口,不进行DNS解析
输出示例分析:
-
如果使用
svnserve在默认端口3690:LISTEN 0 5 0.0.0.0:3690 0.0.0.0:* users:(("svnserve",pid=1234,fd=3))这表示
svnserve进程正在监听所有网络接口的3690端口。 -
如果使用 Apache 在默认端口
80:LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("httpd",pid=5678,fd=4))这表示
httpd(Apache) 进程正在监听所有网络接口的80端口。
使用 netstat 命令 (较老)
sudo netstat -tulpn | grep -E 'svn|3690|80|443'
防火墙配置
无论你使用哪个端口,都必须确保服务器的防火墙允许该端口的入站流量。
使用 firewalld (CentOS/RHEL 7+)
# 允许 svnserve 的默认端口 3690 sudo firewall-cmd --permanent --add-port=3690/tcp sudo firewall-cmd --reload # 如果你的 svnserve 使用了自定义端口 4890 sudo firewall-cmd --permanent --add-port=4890/tcp sudo firewall-cmd --reload # 如果你的 Apache 使用了自定义端口 8080 sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
使用 ufw (Debian/Ubuntu)
# 允许 svnserve 的默认端口 3690 sudo ufw allow 3690/tcp # 如果你的 svnserve 使用了自定义端口 4890 sudo ufw allow 4890/tcp # 如果你的 Apache 使用了自定义端口 8080 sudo ufw allow 8080/tcp
| 运行模式 | 默认端口 | 协议 | 如何修改 |
|---|---|---|---|
svnserve |
3690 | svn:// |
编辑 /etc/sysconfig/svnserve 文件,在 OPTIONS 中添加 --listen-port <新端口>,然后重启服务。 |
| Apache | 80/443 | http/https:// |
编辑 Apache 的主配置文件,修改 Listen 指令,然后重启 Apache 服务。 |
关键步骤:
- 确定你的 SVN 服务器运行模式。
- 根据模式找到正确的配置文件。
- 修改端口配置。
- 重启服务使配置生效。
- 检查防火墙设置,确保新端口已开放。
- 使用
ss或netstat命令验证端口是否正在监听。
