我们在 Windows 机器上运行了一个 BitNami SVN 堆栈,其中包含我们的 SVN 存储库。它设置为针对我们的 AD 服务器进行身份验证,并使用 authz 来控制权限。
我们需要能够通过网络浏览器访问它http://[域名]/svn。域名指向我们正在退役的 Linux 环境,但在此之前,该机器上的其他系统会阻止我们重新指向域记录。
目前,我们在 Linux 机器上有一个 ProxyPass 记录,用于将请求转发到http://[机器名称]/svn - 它似乎工作正常,并且端点机器要求提供凭据,然后进行身份验证:但是当发生这种情况时,访问尝试被记录为来自linux机器,而不是来自已经通过身份验证的用户。
这几乎就像是凭证的某些元素没有传递到端点机器。
有人以前做过这样的事情吗,或者我可以提供其他信息来尝试理解这个问题并找出解决方法吗?
谢谢你!
将尝试以不同的方式解释 -
域名 => A: Apache 服务器(linux)==ProxyPass==> B: Apache/SVN 服务器(windows)
Windows SVN 框中的 httpd.conf 位于此处:http://pastebin.com/Pd5zrnyQ
这里是 Linux 机器上的 apache 配置,它将对 [domain]/svn 的请求转发到 SVN 机器:
# Proxy requests to SVN over to Windows SVN server
ProxyPass /svn http://10.2.1.142/svn
<Location /svn>
ProxyPassReverse http://10.2.1.142/svn
</Location>
如果直接访问 SVN 框,访问日志会显示:
10.2.2.89 - jason.standing [10/Dec/2012:19:04:36 +0000] "GET /svn/ HTTP/1.1" 200 361
10.2.2.89 - jason.standing [10/Dec/2012:19:04:38 +0000] "GET /svn/ HTTP/1.1" 200 361
10.2.2.89 - - [10/Dec/2012:19:04:52 +0000] "GET /svn HTTP/1.1" 401 401
10.2.2.89 - afaef [10/Dec/2012:19:04:54 +0000] "GET /svn HTTP/1.1" 401 401
10.2.2.89 - jason.standing [10/Dec/2012:19:05:02 +0000] "GET /svn HTTP/1.1" 301 225
10.2.2.89 - jason.standing [10/Dec/2012:19:05:03 +0000] "GET /svn/ HTTP/1.1" 200 361
如果您通过域名访问它(从而转发),您将获得:
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "OPTIONS /svn/Product/_Installers HTTP/1.1" 200 183
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/Product/_Installers HTTP/1.1" 207 704
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/Product/_Installers HTTP/1.1" 207 704
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/!svn/vcc/default HTTP/1.1" 207 392
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/!svn/bln/10024 HTTP/1.1" 207 451
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "REPORT /svn/!svn/vcc/default HTTP/1.1" 200 256
在这两种情况下,您都必须使用用户名和密码进行身份验证才能访问网站,但是后一种情况下,凭据似乎被更改了,并且明显的 SVN 用户是具有提升权限的人。我们不希望出现这种情况。
答案1
我不清楚您认为这里的问题是什么,或者更确切地说,您希望发生什么与您描述的不同的事情。
如果您希望记录原始 SVN 客户端的 IP 地址,而不是代理服务器,我在 Google 搜索中找到了以下可能性:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "logs/access_log" combined env=!forwarded
CustomLog "logs/access_log" proxy env=forwarded
基本上,这里会发生的情况是,如果设置了 X-Forwarded-For HTTP 标头(设置为 IP 地址,如果曾经设置过的话),则在日志中使用该 IP 地址,而不是默认地址。
答案2
最好能从 windows 服务器和 linux 服务器获取经过身份验证的请求的网络捕获(例如 Wireshark)。Wireshark 用于 windows,tcpdump 用于 linux。
看起来<Location '/svn'>
正在使用Basic
authn,因此用户名应该在Authorization
标题中(参见http://en.wikipedia.org/wiki/Basic_access_authentication) 而应该由前端 linux 盲目地传递ProxyPass
。
ssi.conf 中有什么?