我在 Windows 上运行 SVN 1.6.3 而不是 Apache 2.2,使用的是最新的 CollabNet Windows 版本。我使用 mod_auth_sspi 和 mod_ssl 来保护我的连接并执行授权。在小型签入和导入时,我的用户在工作中都没有遇到任何问题。但在导入或签入时大量文件,系统会提示用户输入其凭据(服务器立即拒绝),然后出现错误:
PUT of <path and filename>
authorization failed: Could not authenticate to server: rejected Basic
challenge (https://<my server name>)
我们尝试使用命令行客户端和 TortoiseSVN。
此错误似乎与签入的文件数量有关,而不是提交内容的总大小。例如,如果我尝试签入 90 个 1 字节 .txt 文件,导入将失败,如所述。它并不总是 90 个文件——我认为这与文件名的总大小有关。我有一种挥之不去的感觉,SVN 试图将所有文件名塞进一个 HTTP 请求标头或其他东西中,而 Apache 以某种方式拒绝了它。
我无法使用 Wireshark 检查 HTTP 级别上发生的情况,因为所有内容都是通过 HTTPS 加密的。这是我的配置文件,没有任何注释。有人遇到过这种情况吗?有什么建议吗?
ThreadsPerChild 250
MaxRequestsPerChild 0
ServerRoot "C:\Program Files\CollabNet Subversion Server/httpd"
Listen 443
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule sspi_auth_module modules/mod_auth_sspi.so
LoadModule authz_svn_module modules/mod_authz_svn.so
ServerAdmin localhost@localdomain
ServerName sourcecontrol.mydomain.com
DocumentRoot "C:\Program Files\CollabNet Subversion Server/httpd/htdocs"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
Satisfy all
</Directory>
<Directory "C:\Program Files\CollabNet Subversion Server/httpd/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
</FilesMatch>
ErrorLog logs/error.log
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog logs/access.log common
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "C:\Program Files\CollabNet Subversion Server/httpd/cgi-bin/"
</IfModule>
<Directory "C:\Program Files\CollabNet Subversion Server/httpd/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
DefaultType text/plain
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
<Location /svn>
DAV svn
SVNParentPath D:\repository
AuthName "Subversion repository"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain NA
SSPIOfferBasic On
Require valid-user
SVNAutoVersioning on
ModMimeUsePathInfo on
AuthzSVNAccessFile "d:/repository/access-file.txt"
</Location>
<VirtualHost *:443 >
DocumentRoot d:\repository
SSLEngine On
SSLCertificateFile conf/ssl.crt/server.crt
SSLCertificateKeyFile conf/ssl.crt/server.key
</VirtualHost>
答案1
事实证明我需要将这一行添加到 httpd.conf 中(我将其添加到顶部以便它适用于所有目录)
MaxKeepAliveRequests 0
为了保险起见,我又补充了
KeepAlive On
以防他们决定在下一个版本的 httpd 中对我采取一切聪明的措施并将其默认为关闭。