Apache-2.2
nginx、apache http認證
我有一個 nginx 反向代理伺服器,它通過 apache 後端輸入清漆記憶體。
php 作為從 apache 啟動的 fastcgi 程序執行。
我試圖讓一些 php 軟體工作,但是基本的 HTTP 身份驗證對話框不接受任何使用者名或密碼。我做了一些探勘並想出了這個放入一個 .htaccess 文件:
RewriteEngine On RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
這已經解決了基本 HTTP 身份驗證的身份驗證問題。
現在我一直在嘗試弄清楚這到底做了什麼,所以我的問題是:為什麼添加這個重寫規則會使身份驗證開始工作?
目前我所能想到的是,沿著 nginx -> varnish -> apache 鏈的某個地方,apache 沒有收到 auth 標頭。我想了解這裡發生了什麼,以便我可以在伺服器級別實施更改,以阻止這種情況在其他地方發生。
有人可以澄清一下嗎?
謝謝
失去 HTTP 身份驗證似乎不是nginx或Varnish的問題。
這個重寫規則不是為了讓Apache可以訪問**身份驗證頭欄位,而是讓Fast-CGI後端訪問(假設應該在PHP中辨識身份驗證)。
身份驗證標頭通常對 Fast-CGI 隱藏。你可以
- 要麼使用此
RewriteRule
技巧REMOTE_USER
手動設置環境變數;- 或將標頭傳遞給 Fast-CGI的
mod_fastcgi
配置變數:FastCgi伺服器:
$$ … $$
-pass-header header (none)
> > 要在請求環境中傳遞的 HTTP 請求標頭的名稱。此選項使 CGI 環境通常不可用的標頭內容(例如授權)可用 > > >
$$ … $$