OmniAuth在反向代理设置中使用错误的回调端口

时间:2011-07-23 21:04:58

标签: ruby-on-rails apache port omniauth reverse-proxy

我在端口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>

我找到了一些答案,例如thisthis,但它们都是针对Nginx设置的。

我尝试使用OmniAuth.config.full_host = 'http://my domain.com'的初始值设定项,但我想知道我的apache设置中是否没有丢失配置(如前面的答案)。

提前致谢。

2 个答案:

答案 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变量值的值,而不是关注它在主页上发送的错误。

相关问题