Apache 代理后面的 eXist db - 身份验证

Apache 代理后面的 eXist db - 身份验证

我运行一个 eXist db XML 数据库,该数据库由 Apache 代理。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浏览器访问,我不是提示输入任何密码。但是,我现在想使用基本用户身份验证来保护 Apache 可能发送或代理的所有内容(包括 ErrorDocuments)。

因此,我补充说

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

到 httpd.conf。(显然,我在 VirtualHost 部分还是在其外部执行此操作都没有关系。)

问题就从这里开始了。

现在尝试访问 localhost 时,系统会提示我登录两次:首先,我必须输入 Apache“仅限 Beta 测试人员”的密码。输入合法的登录信息后,浏览器会提示我第二次登录。这次是 eXist。但是,尝试使用我的 eXist 管理员密码登录会导致 Firefox 中无休止的等待而没有任何反应,而在 Konqueror 中,我收到“身份验证失败”的提示。

我就是搞不懂为什么 eXist 会提示我输入密码。为什么 eXist 会关心我是否在 Apache 中设置了密码?

答案1

我想象您看到两个对话框的原因是 Apache 正在执行基本身份验证,然后将一些 HTTP 标头转发到 eXist,但是 eXist 拒绝身份验证标头,因为它没有与 Apache 相同的用户数据库,因此它会尝试重新进行身份验证。

如果我理解正确的话。您希望使用 Apache 管理所有身份验证,并将 eXist 排除在身份验证方程之外。这样对吗?

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

另一个选择可能是在 eXist 中仅授予来宾用户对所有内容的所有访问权限,但这是一个糟糕的想法。

我认为您最好反过来做,即不要在 Apache 中为您正在代理的 eXist URL 明确设置身份验证。相反,您让 eXist 管理其身份验证。eXist 完美地支持基本身份验证(即使在 Apache 后面进行代理时),您只需要在 eXist 中适当设置用户和权限。

相关内容