所以我为了它而将基于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 webappsudo 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;
}
任何想法?