2015-10-27 259 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