我在端口3101
上运行了一个Rails应用程序,并通过Apache反向代理设置将其提供给互联网(就像Phusion在this blog post上建议的那样。
我正在使用Devise + OmniAuth来处理Facebook身份验证。
但是当我尝试通过Facebook进行身份验证时,我被重定向到了网址:http://mydomain.com:3101/my_callback_path
我使用passenger start -a 127.0.0.1 -p 3101 -d
启动rails应用程序,我的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>
我找到了一些答案,例如this和this,但它们都是针对Nginx设置的。
我尝试使用OmniAuth.config.full_host = 'http://my domain.com'
的初始值设定项,但我想知道我的apache设置中是否没有丢失配置(如前面的答案)。
提前致谢。
答案 0 :(得分:12)
我查看了OmniAuth源代码,发现回调机制内部使用名为full_host
的方法查找配置变量,然后构建URI的第一部分 - 查看{{ 1}}
配置变量可以是String(如您的情况),也可以是Proc或nil(或其他任何内容)。在后一种情况下,请求URI被解析,切断并返回。
我认为我们无法通过在Apache中设置环境变量来解决我们的常见问题(这可能应该在较低级别,在ruby应用程序堆栈内完成),但经过一些实验后我发现这是有效的对我来说足够好了:
oa-core-0.2.6/lib/omniauth/strategy.rb
答案 1 :(得分:1)
我有同样的问题。它通过设置
解决了**proxy_set_header Host <proxy-domain-name>;**
location / {
proxy_pass http://127.0.0.1:3000;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host <domain name>;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
关于facebook重定向问题,我花了一些时间调查重定向回调的实际url的值,所以我不得不在nginx conf中修复它。要找到它,请查看链接中的URL并查看“redirect_uri”GET变量值的值,而不是关注它在主页上发送的错误。