eXist后面的Apache代理 – 身份validation

我运行一个在Apache后面代理的eXist db XML数据库。 httpd.conf的设置如下:

<VirtualHost *:80> ServerName foo ServerAlias foo ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8080/exist/apps/foo/ ProxyPassReverse / http://localhost:8080/exist/apps/foo/ ProxyTimeout 20 ProxyPassReverseCookiePath /exist / ProxyPassReverseCookieDomain localhost foo RewriteEngine on RewriteRule ^/(.*)$ /$1 [PT] </VirtualHost> 

这工作得很好。 通过浏览器访问http://localhost ,我不会提示input任何密码。 但是,我现在想要保护Apache可能发送或代理(包括ErrorDocuments)与基本用户身份validation的一切。

所以,我补充说

 <Location /> AuthUserFile /etc/users AuthName "Beta testers only" AuthType Basic Require valid-user </Location> 

到httpd.conf。 (很明显,我在VirtualHost部分还是在VirtualHost部分之外做这件事并不重要。)

这是问题的起点。

当试图访问本地主机时,系统会提示input两次:首先,我必须inputApache“Betatesting人员”的密码。 在我input一个合法的login信息之后,浏览器会提示我再次login。 这次是由eXist。 然而,试图用我的eXistpipe理员密码login导致Firefox无尽的等待时间没有发生任何事情,而在Konqueror我得到“身份validation失败”。

我简直不明白为什么我提示inputeXist的密码。 eXist为什么在乎我是否在Apache中设置了密码?

为什么你看到两个对话我想象的是,Apache正在做基本的authentication,然后转发一些HTTP头到eXist,但是eXist拒绝auth头,因为它没有与Apache相同的用户数据库,所以它尝试重新进行身份validation。

如果我理解正确。 您希望使用Apachepipe理所有身份validation,并将eXist保留在身份validation方程中。 那是对的吗?

如果是这样,你可能很难做到这一点。 eXist有它自己的用户数据库,如果你希望它使用与Apache相同的数据库,你将需要为eXist开发自己的Realm插件,以便它可以使用与Apache相同的用户数据库(可能你只是使用PAM(最终/ etc / passwd中))。 如果你使用的是LDAP,那么eXist已经有一个LDAP Realm插件,所以你可以设置Apache和eXist来使用它。

另外一种select是,eXist可以给访客用户一切权限,但这是一个糟糕的主意。

我认为你可能会更好地工作,而不是在Apache中为你正在代理的eXist URL明确设置Authentication。 而是让eXistpipe理它的authentication。 eXist完全支持基本身份validation(即使在Apache后面进行代理),您只需要在eXist中正确设置用户和权限即可。