2016-06-11 8 views
1

Так что я переходящих рельсы сайта на основе к Docker ради него;)Не получать REMOTE_USER заголовок в рельсах приложение работает на пассажирских ж/Nginx позади апача

я использую phusion/passenger-docker поддержать мое приложение рельсы. внутри него я использую rack-webauth, который захватывает WEBAUTH_USER или REMOTE_USER для части аутентификации. к сожалению, я могу использовать версию Apache для Web-сайта Стэндфорда для аутентификации; поэтому я не могу (в настоящее время) использовать для этого экземпляр nginx.

поэтому, я использую ProxyPass в экземпляре Apache, чтобы перенаправить трафик на мое приложение nginx'd. приложение отлично работает для неавторизованных частей моего приложения; однако после того, как я аутентифицируюсь, мое приложение, которое теперь находится в докере, похоже, не видит переменную среды REMOTE_USER (через puts env в моем ruby-коде).

Мои 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 [email protected] 
    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> 

(это же определение VirtualHost в не dockerised веб-приложение работает отлично - то есть, когда я бегу мое веб-приложение под апача с таким же адресом строфы, это работает, и я вижу REMOTE_USER)

И, конечно, я бегу dockerised с веб-приложение

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

Возможно, это будет поздний ответ, но надеемся, что он будет полезен другим.

Изменение REMOTE_USER на HTTP_REMOTE_USER сработало для меня.

Для получения более подробной информации, я нахожу this ответ ясно.