2015-10-27 63 views
0

我的Apache設置有問題。如何在HTTP頭中設置REMOTE_USER?

我安裝的部分是接受外部身份驗證的Web應用程序:

  • 我使用Apache管理訪問我的應用程序的網頁。
  • 如果認證成功,則使用用戶名設置環境變量REMOTE_USER。
  • 然後通過HTTP標頭將用戶名傳遞給我的應用程序,以便應用程序在用戶會話中打開。
  • 這主要是應用程序的Apache配置。我只在應用程序配置文件中設置了包含用戶名的變量(HTTP標頭)的名稱。

這是問題:我可以驗證成功(大部分時間),但我的HTTP標頭設置爲空。

一些額外的細節:

  • 我使用Apache和mod_perl的模塊(AuthenNIS + AuthzNIS +淨-NIS)來驗證我的NIS帳戶的應用程序。
  • 使用以下Apache配置文件當我嘗試訪問我的應用程序但REMOTE_USER標頭設置爲空時,我有身份驗證表單。

    Listen 2208 
        <VirtualHost *:2208> 
    
           RewriteEngine on 
           DocumentRoot "/path/to/static" 
    
    
           <Directory "/path/to/static"> 
    
              Options +Indexes FollowSymLinks MultiViews 
              AllowOverride None 
              Order allow,deny 
              Allow from all 
    
    
              AuthType Basic 
              AuthName "Authentifiez vous" 
              PerlAuthenHandler Apache2::AuthenNIS 
              PerlAuthzHandler Apache2::AuthzNIS 
              PerlSetVar AllowAlternateAuth no 
              require valid-user 
    
           </Directory> 
    
    
           RewriteEngine on 
           RewriteRule . - [E=RU:%{LA-U:REMOTE_USER}] 
           RequestHeader set REMOTE_USER %{RU}e 
    
             RewriteRule ^/apps$ /apps/ [R] 
             RewriteRule ^/static/style/(.*) /path/to/static/june_2007_style/blue/$1 [L] 
             RewriteRule ^/static/scripts/(.*) /path/to/static/scripts/packed/$1 [L] 
             RewriteRule ^/static/(.*) /path/to/static/$1 [L] 
             RewriteRule ^/favicon.ico /path/to/static/favicon.ico [L] 
             RewriteRule ^/robots.txt /path/to/static/robots.txt [L] 
             RewriteRule ^(.*) http://localhost:2209$1 [P] 
    
        </VirtualHost> 
    

如果我設置RequestHeader設置REMOTE_USER「用戶名」的應用程序打開上相應的用戶會話。

要查看REMOTE_USER的值我使用Firebug Firefox模塊顯示http頭的值+我的應用程序有一個腳本,顯示傳遞給它的變量的值。

我在一個index.php頁面上測試了一個幾乎完全相同的Apache配置,該頁面顯示了http請求中服務器變量的值。區別在於RewriteRules。

 <?PHP 
        foreach($_SERVER as $key_name => $key_value) { 
        print $key_name . " = " . $key_value . "<br>"; 

        } 
     ?> 

在這種情況下,我得到一個REMOTE_USER和HTTP_REMOTE_USER用戶名值。

我不明白我的問題在哪裏。

的Apache 2.2.31 的RedHat 6.5

在此先感謝!

回答

5

請勿使用以下內容,因爲如果REMOTE_USER使用mod_authn_ntlm(ntlm本地計算機,請參閱https://support.microsoft.com/en-us/kb/896861)設置,您將在執行階段遇到問題。

RewriteCond %{LA-U:REMOTE_USER} (.+) 
RewriteRule . - [E=RU:%1] 
RequestHeader set X-Remote-User %{RU}e 

,而不是使用以下方法:

RequestHeader set X-Remote-User expr=%{REMOTE_USER} 

也有與mod_ssl的

RequestHeader set X-Remote-User %{REMOTE_USER}s 
+2

這是Apache 2.4的正確答案的解決方案。舊式(RewriteCond等)僅適用於2.2。 – Jake

+0

RequestHeader對我來說也適用於2.4! RewriteRule打破了Web服務之間的後續請求,我得到了遞歸錯誤!這是正確的答案。 – koullislp

+0

非ssl版本,'RequestHeader set X-Remote-User expr =%{REMOTE_USER}'只適用於Apache 2.4.10+。 – howinator