在apache后面的乘客w / nginx上运行的rails应用程序中没有获得REMOTE_USER标头

时间:2016-06-11 05:56:34

标签: apache authentication nginx passenger proxypass

所以我为了它而将基于rails的网站转换到Docker;)

我使用phusion/passenger-docker来支持我的rails应用。在其中,我使用rack-webauth来获取认证文件的WEBAUTH_USER或REMOTE_USER。不幸的是,我只能使用Apache版本的Stanford Webauth进行身份验证;所以我不能(目前)使用nginx实例。

因此,我在Apache实例中使用ProxyPass将流量转发到我的dockerised nginx'd应用程序。该应用程序适用于我的应用程序的未经身份验证的部分;但是,在我进行身份验证后,我现在的dockerised应用程序似乎没有看到REMOTE_USER环境变量(通过我的ruby代码中的puts env)。

我的Apache配置:

Listen 8443
<VirtualHost *:8443>
   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
   SSLCertificateFile /etc/pki/tls/certs/blah.crt
   SSLCertificateKeyFile /etc/pki/tls/private/blah.key
   SSLCertificateChainFile /etc/pki/tls/certs/IntermediateCA.crt

   ServerAdmin blah@blah.com
   ServerName www.blah.com
   RewriteOptions inherit

   LogLevel    info
   ErrorLog    logs/web_error.log
   CustomLog   logs/web_access.log combined

   WebAuthCredCacheDir conf/webauth/credcache/
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyVia On
    ProxyPassInterpolateEnv On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
    <Location />
        SSLOptions +StdEnvVars
        WebAuthExtraRedirect on
        AuthType WebAuth
        require valid-user
        RequestHeader merge REMOTE_USER %{REMOTE_USER}s
        RewriteEngine On
        RewriteRule .* - [E=REMOTE_USER:%{REMOTE_USER}]
    </Location>

   SetEnvIf User-Agent ".*MSIE.*" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

</VirtualHost>

(非dockerised webapp中的这个虚拟主机定义工作正常 - 即当我使用相同的Location节在apache下运行我的webapp时,它可以工作,我看到了REMOTE_USER)

当然,我用

运行dockerised webapp
sudo docker run -p 8080:80 mywebapp

dockerised nginx实例中的我的网站定义是:

server {
  listen 80;
  server_name blah.com;
  root /home/app/webapp/public;

  passenger_enabled on;
  passenger_user app;
  passenger_app_env development;

  passenger_ruby /usr/bin/ruby;
}

任何想法?

1 个答案:

答案 0 :(得分:1)

可能是一个迟到的答案,但希望它对其他人有用。

将REMOTE_USER更改为HTTP_REMOTE_USER对我有用。

有关详细信息,我发现this回答清楚。