我们有一个运行在Windows机器上的BitNami SVN堆栈,它包含我们的SVN仓库。 它设置为对AD服务器进行身份validation,并使用authz来控制权限。
我们需要通过http:// [domain] / svn的Web浏览器访问它。 域名指向我们正在退役的Linux环境,但在我们这样做之前,该框上的其他系统阻止我们重新指向域logging。
目前,我们在linux机器上有一个ProxyPasslogging来转发请求到http:// [machine name] / svn – 它似乎工作正常,并且terminal机器要求凭证,然后进行身份validation:但是当这种情况发生时,访问尝试被logging为来自linux框,而不是来自已经authentication的用户。
这几乎就像凭证的某些元素没有被传递到端点机器。
有没有人以前做过这个,或者有其他的信息可以帮我们弄清楚这个问题,想办法解决这个问题吗?
谢谢!
将尝试以不同的方式解释 –
域名=> A:Apache服务器(linux)== ProxyPass ==> B:Apache / SVN服务器(windows)
Windows SVN框中的httpd.conf文件位于: http : //pastebin.com/Pd5zrnyQ
这里是在linux框中的Apacheconfiguration文件,它将请求转发到[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
在这两种情况下,您必须在访问网站之前使用用户名和密码进行身份validation,但是后一种情况下,凭据似乎正在改变,明显的SVN用户是具有较高权限的用户。 而我们不需要这个。
我不清楚你认为这是什么问题,或者说,你会希望发生什么不同于你所描述的。
如果您希望logging原始的SVN客户端的IP地址,而不是代理服务器,我在Googlesearch中发现了以下可能性:
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地址,而不是默认值。
从Windows服务器和Linux服务器上获得经过validation的请求的networking捕获(例如Wireshark)是很好的。 用于Windows的Wireshark,用于Linux的tcpdump。
看起来像<Location '/svn'>
正在使用Basic
authn,所以用户名应该在Authorization
头部(见http://en.wikipedia.org/wiki/Basic_access_authentication ),并且应该被前端linux ProxyPass
。
什么是ssi.conf?