2011-07-23 62 views
5

我有一個Rails應用程序端口3101運行,我把它提供給互聯網通過一個Apache反向代理設置(如一個通過的Phusion上this blog post建議。OmniAuth在反向代理設置使用錯誤的回調端口

我使用設計+ OmniAuth處理Facebook驗證

但是當我嘗試通過Facebook進行身份驗證,我重定向到URL: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> 

我發現了一些答案,如thisthis,但它們都是針對Nginx的設置。

我試過使用OmniAuth.config.full_host = 'http://my domain.com'的初始值設定項,但我想知道在我的apache設置中是否有缺少的配置(如以前的答案)。

在此先感謝。

回答

12

我看看到OmniAuth源,結果發現,回撥機制在內部使用了一個名爲full_host方法查找配置變量,然後構建URI的第一部分 - 看看oa-core-0.2.6/lib/omniauth/strategy.rb

配置變量可以是一個字符串(如你的情況),或者一個Proc,或者零(或其他)。在後一種情況下,請求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 
+0

爲我工作!非常感謝 – Addsy

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變量值的值,而不是關注它在主頁面上發送的錯誤。