Rei*_*ior 5 apache port reverse-proxy ruby-on-rails omniauth
我有一个在端口上运行的Rails应用程序3101,我通过Apache反向代理设置将其提供给互联网(就像Phusion在此博客文章中建议的那样).
我正在使用Devise + OmniAuth来处理Facebook身份验证.
但是当我尝试通过Facebook进行身份验证时,我被重定向到了网址: http://mydomain.com:3101/my_callback_path
我启动rails应用程序,passenger start -a 127.0.0.1 -p 3101 -d我的Apache设置是:
<VirtualHost *:80>
ServerName mydomain.com
PassengerEnabled off
ProxyPass / http://127.0.0.1:3101/
ProxyPassReverse / http://127.0.0.1:3101
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我发现像一些答案,这个和这个,但他们都打算Nginx的设置.
我试过使用初始化程序,OmniAuth.config.full_host = 'http://my domain.com'但我想知道我的apache设置中是否没有丢失配置(如前面的答案).
提前致谢.
wiz*_*wiz 12
我查看了OmniAuth源代码,发现回调机制在内部使用了一个名为full_host查找配置变量的方法然后构建URI的第一部分 - 看看oa-core-0.2.6/lib/omniauth/strategy.rb
配置变量可以是String(如您的情况),也可以是Proc或nil(或其他任何内容).在后一种情况下,请求URI被解析,切断和返回.
我认为我们不能通过在Apache中设置一个环境变量来解决我们的常见问题(这可能应该在较低级别,在ruby应用程序堆栈中完成),但经过一些实验后我发现这个工作得很好我:
OmniAuth.config.full_host = lambda do |env|
scheme = env['rack.url_scheme']
local_host = env['HTTP_HOST']
forwarded_host = env['HTTP_X_FORWARDED_HOST']
forwarded_host.blank? ? "#{scheme}://#{local_host}" : "#{scheme}://#{forwarded_host}"
end
Run Code Online (Sandbox Code Playgroud)