Apache-2.2

具有基本身份驗證的 apache 反向代理

  • June 1, 2016

我正在嘗試在 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 伺服器——這是錯誤的。它在應用程序中:)

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