当SVN客户端无法通过域名连接Subversion服务器时,通常表现为“不能解析主机”“连接超时”“连接被拒绝”或证书错误。此问题需从DNS解析、网络路由、SVN服务监听、防火墙规则及Web服务配置五个层面排查。

第一步:验证域名解析是否正常。在SVN客户端所在机器上执行 nslookup yourdomain.com 或 ping yourdomain.com,确认域名是否解析到正确的服务器IP。如果解析结果为空、解析到公网IP而非内网IP、或出现“Non-existent domain”提示,则说明是DNS配置错误。应检查域名注册商的解析记录、DNS服务器状态以及客户端本机的hosts文件(Windows路径为 C:\Windows\System32\drivers\etc\hosts,Linux路径为 /etc/hosts)。若在局域网内使用,还需要确认是否使用内部DNS服务器,且该服务器是否缓存了错误记录。
第二步:测试网络连通性。SVN连接基于不同协议使用不同端口:svn:// 默认使用3690端口,svn+ssh:// 使用22端口,http:// 使用80端口,https:// 使用443端口。执行 telnet yourdomain.com 3690(或对应端口)看是否能够连通。如果连接超时、被拒绝或无响应,说明网络路由、防火墙或安全组存在问题。需要检查客户端防火墙、服务器防火墙、云服务商的安全组规则,以及路由器上的端口映射(如果SVN服务器位于NAT内部)。
第三步:确认SVN服务是否在监听正确的地址。在服务器上执行 netstat -an | grep 3690(Linux)或 netstat -an | findstr 3690(Windows),查看SVN服务是否监听在0.0.0.0或服务器对应IP上。如果只监听在127.0.0.1上,则外部客户端无法通过域名访问。对于svnserve,可在启动时指定 --listen-host 参数;对于由inetd/xinetd管理的svnserve,需检查其监听配置。
第四步:针对HTTP/HTTPS协议的服务器配置检查。如果使用 Apache + mod_dav_svn 提供SVN服务,且通过域名访问失败,需要检查Apache的VirtualHost配置是否正确绑定了域名。重点检查 ServerName 是否与访问域名一致,DocumentRoot 或 Location 映射的仓库路径是否存在,以及 Directory/Alias 权限是否允许访问。还要确保SSL证书的证书域名与访问域名匹配,否则会出现证书错误导致无法连接。HTTPS连接时,可执行 curl -v https://yourdomain.com/svn/repo 查看详细握手过程,确认TLS证书是否有效。
第五步:检查SVN仓库配置与访问权限。即使网络和服务均正常,如果仓库路径错误或访问控制过于严格,SVN客户端也可能报“无法连接”。需要确认URL中的仓库名大小写是否正确,尤其是Linux服务器的路径是区分大小写的。同时检查svnserve.conf中的 anon-access 和 auth-access 配置,以及authz文件中是否允许了当前用户访问。注意,这类问题通常不属于“无法连接域名”,但如果服务端响应异常,客户端提示可能相近。
第六步:考虑代理和VPN的影响。如果客户端配置了HTTP代理,而SVN走的是svn:// 协议,代理通常不起作用;但如果走HTTP或HTTPS协议,代理服务器可能阻断SVN请求。需要检查SVN客户端的配置文件(Windows中位于 %APPDATA%\Subversion\servers,Linux中位于 ~/.subversion/servers)中是否设置了代理且代理地址不可达。如果使用VPN,还需要确认VPN路由是否覆盖SVN服务器所在网段,避免出现“域名能ping通但端口不通”的现象。
第七步:检查IPv6与IPv4冲突。如果域名同时解析出IPv6和IPv4地址,而SVN服务器不支持IPv6,客户端会优先尝试IPv6并超时。可以通过执行 ping -4 yourdomain.com 强制使用IPv4测试,如果IPv4正常,则需要在客户端hosts文件、DNS解析项或系统网络设置中优先使用IPv4,或关闭客户端的IPv6支持。
总结:SVN无法连接域名的大多数原因是DNS解析错误、服务未监听公网/内网IP、防火墙或安全组未放行对应端口、Apache虚拟主机未匹配域名以及SSL证书域名不匹配。按照“先解析、再连通、后服务”的顺序逐一排查,通常能快速定位问题。若所有网络层面都正常,还需仔细检查SVN服务端日志,例如Linux下 /var/log/syslog、/var/log/secure,以及Apache的 error_log,日志中会记录域名为主的访问尝试及具体错误原因。

查看详情

查看详情