Apache-2.2
具有基本身份驗證的 apache 反向代理
我正在嘗試在 centos 6 上使用 apache httpd 2.2 反向代理一個網站。應該通過基本身份驗證限制對該網站的一部分的訪問。為此,我有以下配置:
<Location ~ "(/ac/sd|/myapp/pages)"> AuthType Basic AuthName "Restricted area" AuthBasicProvider file AuthUserFile "/etc/httpd/passwords" Require valid-user </Location> # restricted area ProxyPass /ac/sd/pages/UI.php http://myapp-test.acme.org:8000/myapp/pages/UI.php ProxyPassReverse /ac/sd/pages/UI.php http://myapp-test.acme.org:8000/myapp/pages/UI.php ProxyPass /ac/sd/pages/logoff.php http://myapp-test.acme.org:8000/myapp/pages/logoff.php ProxyPassReverse /ac/sd/pages/logoff.php http://myapp-test.acme.org:8000/myapp/pages/logoff.php ProxyPass /ac/sd http://myapp-test.acme.org:8000/myapp ProxyPassReverse /ac/sd http://myapp-test.acme.org:8000/myapp ProxyPass /myapp/pages http://myapp-test.acme.org:8000/myapp/pages ProxyPassReverse /myapp/pages http://myapp-test.acme.org:8000/myapp/pages # unrestricted area ProxyPass /ac/pages/UI.php http://myapp-test.acme.org:8000/myapp/portal/index.php ProxyPassReverse /ac/pages/UI.php http://myapp-test.acme.org:8000/myapp/portal/index.php ProxyPass /ac/pages/logoff.php http://myapp-test.acme.org:8000/myapp/portal/logoff.php ProxyPassReverse /ac/pages/logoff.php http://myapp-test.acme.org:8000/myapp/portal/logoff.php ProxyPass /ac/portal http://myapp-test.acme.org:8000/myapp/portal ProxyPassReverse /ac/portal http://myapp-test.acme.org:8000/myapp/portal ProxyPass /ac http://myapp-test.acme.org:8000/myapp ProxyPassReverse /ac http://myapp-test.acme.org:8000/myapp ProxyPass /portal http://myapp-test.acme.org:8000/myapp/portal ProxyPassReverse /portal http://myapp-test.acme.org:8000/myapp/portal
反向代理部分正在工作,我在沒有身份驗證的情況下進行了測試。身份驗證部分也正在工作,我已經使用一個簡單的 index.html 進行了測試,該 index.html 沒有被代理,但駐留在上面配置的伺服器上。
現在不起作用的是身份驗證和反向代理。發生的情況是,當我嘗試使用網路瀏覽器訪問該站點時,會出現要求身份驗證的彈出視窗,其中“受限區域”作為彈出文本的一部分。我輸入憑據,片刻之後,沒有載入任何內容,憑據彈出視窗再次出現,這次彈出文本中帶有“myapp”。無論我在那裡輸入什麼,它都會再次彈出。因此,似乎第一個身份驗證成功,但由於某種原因,代理站點發送了另一個基本身份驗證。這可能是我的誤解——我真的不明白這裡發生了什麼。
我還嘗試使用幾乎相同的配置來反向代理 python simpleHTTPServer。那裡的反向代理和身份驗證工作。因此,我的應用程序似乎有一些東西與代理或身份驗證一起進行。不過,如果應用程序中沒有基本身份驗證,為什麼它會不斷彈出?
有任何想法嗎?
用 觀察流量後
tcpdump
,我發現確實是代理伺服器正在發送另一個身份驗證請求。反向代理轉發
Authorization: Basic XXXXXXXXXXXXXXXXX
標頭,應用程序將其視為有效的登錄過程。但是,由於反向代理 htpassword 文件中的登錄憑據與儲存在應用程序中的憑據不匹配,因此登錄失敗並且應用程序發送另一個身份驗證請求。讓我感到震驚的是,我預計基本的身份驗證請求將來自應用程序 Web 伺服器——這是錯誤的。它在應用程序中:)