Proxy

Apache 代理背後的 eXist db - 身份驗證

  • November 10, 2015

我執行一個在 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瀏覽器訪問,我不會被提示輸入任何密碼。但是,我現在想通過基本使用者身份驗證保護 Apache 可能發送或代理的所有內容(包括 ErrorDocuments)。

因此,我補充說

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

到 httpd.conf。(顯然,我是在 VirtualHost 部分還是在它之外這樣做都沒有關係。)

這就是問題開始的地方。

現在嘗試訪問 localhost 時,系統會提示我兩次登錄:首先,我必須輸入 Apache“僅限 Beta 測試人員”的密碼。輸入合法登錄後,瀏覽器會提示我進行第二次登錄。這次是 eXist。但是,在 Firefox 中嘗試使用我的 eXist 管理員密碼登錄會導致無休止的等待時間而沒有任何事情發生,而在 Konqueror 中我得到“身份驗證失敗”。

我簡直無法理解為什麼 eXist 會提示我輸入密碼。為什麼 eXist 關心我是否在 Apache 中設置了密碼?

我想你看到兩個對話的原因是 Apache 正在執行基本身份驗證,然後將一些 HTTP 標頭轉發給 eXist,但是 eXist 拒絕 auth 標頭,因為它沒有與 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 中適當地設置使用者和權限。

引用自:https://serverfault.com/questions/734960