Apache-2.2

nginx、apache http認證

  • March 11, 2013

我有一個 nginx 反向代理伺服器,它通過 apache 後端輸入清漆記憶體。

php 作為從 apache 啟動的 fastcgi 程序執行。

我試圖讓一些 php 軟體工作,但是基本的 HTTP 身份驗證對話框不接受任何使用者名或密碼。我做了一些探勘並想出了這個放入一個 .htaccess 文件:

RewriteEngine On
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]

這已經解決了基本 HTTP 身份驗證的身份驗證問題。

現在我一直在嘗試弄清楚這到底做了什麼,所以我的問題是:為什麼添加這個重寫規則會使身份驗證開始工作?

目前我所能想到的是,沿著 nginx -> varnish -> apache 鏈的某個地方,apache 沒有收到 auth 標頭。我想了解這裡發生了什麼,以便我可以在伺服器級別實施更改,以阻止這種情況在其他地方發生。

有人可以澄清一下嗎?

謝謝

失去 HTTP 身份驗證似乎不是nginxVarnish的問題。

這個重寫規則不是為了讓Apache可以訪問**身份驗證頭欄位,而是讓Fast-CGI後端訪問(假設應該在PHP中辨識身份驗證)。

身份驗證標頭通常對 Fast-CGI 隱藏。你可以

  • 要麼使用此RewriteRule技巧REMOTE_USER手動設置環境變數;
  • 或將標頭傳遞給 Fast-CGI的mod_fastcgi 配置變數:

FastCgi伺服器:

$$ … $$ -pass-header header (none)

> > 要在請求環境中傳遞的 HTTP 請求標頭的名稱。此選項使 CGI 環境通常不可用的標頭內容(例如授權)可用 > > >

$$ … $$

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