2015-12-12 86 views
5

我有一個我在Heroku上構建的rails應用程序,我已經配置它在那裏使用SSL。現在,我正在轉向AWS EC2,並希望在沒有SSL的情況下使用我的應用版本。一旦完成,我將在稍後添加SSL功能。Rails:爲什麼我的服務器將http重定向到https

我的堆棧是Puma + Nginx + PostgreSQL,我正在使用Rails 4.2.4,Ruby 2.2.3和Capistrano 3.4.0。

我記得在我的應用程序,我曾經插入的行

config.force_ssl = true 
在配置/環境/ production.rb

。我評論了這一點,期待我的應用程序能夠很好地與http協同工作。但事實並非如此:即使在評論該行後,每當我訪問我的EC2公共IP(52.35.82.113)時,請求都將在端口80(http)上發送,並被重定向到端口443(https)。

這可以更清楚地看到,當我在我的EC2實例上運行curl -v http://localhost它返回:

* Rebuilt URL to: http://localhost/ 
* Hostname was NOT found in DNS cache 
* Trying 127.0.0.1... 
* Connected to localhost (127.0.0.1) port 80 (#0) 
> GET/HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: localhost 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
* Server nginx/1.4.6 (Ubuntu) is not blacklisted 
< Server: nginx/1.4.6 (Ubuntu) 
< Date: Sat, 12 Dec 2015 12:22:56 GMT 
< Content-Type: text/html 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Location: https://localhost/ 
< 
* Connection #0 to host localhost left intact 

我不是很有經驗,當涉及到這些東西。我以爲最初這個問題會出現在我的Nginx配置中,在我之前的問題here中,有人向我建議我的Nginx配置沒有問題,而且重定向來自Rails。我懷疑是這種情況,因爲我在Nginx中看不到任何可以強制重定向的東西,但是如果您認爲問題可能存在,那麼您可以在上面的鏈接中看到很多相關的代碼。

除了上面列出的force_ssl之外,還有哪些Rails會導致重定向?

感謝您的幫助。如果您有任何疑問或需要更多信息,請告知我們!

+1

我猜你的nginx的配置,您已經做了力SSL。 – Emu

+0

你有沒有重新啓動你的Puma服務器? – Tobias

+0

嗨@Tobias。是的,我使用'ps'來查找進程ID並使用'kill -s SIGUSR2 ' – Dennis

回答

3

在Rails中,您可以使用配置文件(如您正在做的那樣)強制實現站點範圍的SSL,或者您可以選擇哪些端點將使用SSL並在控制器級別使用force_ssl類方法。

也許你在你的application_controller.rb上使用過這種方法,或者哪個控制器正在爲根路徑服務並忘記它。可在導軌內的文檔找到這樣機構的爲例:http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html

force_ssl(選項= {})鏈路組請求該特定 控制器或指定的動作是HTTPS協議下。

如果您因任何原因需要禁用此功能(例如開發),那麼您的 可以使用:if或:unless除條件。

class AccountsController < ApplicationController 
    force_ssl if: :ssl_configured? 

    def ssl_configured? 
    !Rails.env.development? 
    end 
end 
+0

Hi @ alexandre-angelim,這是一個非常好的調用,但不幸的是,沒有在我的應用程序控制器或服務於根路徑的「主」控制器中沒有這樣的事情。我也嘗試在我的配置/ routes.rb看,但沒有什麼會這樣做 – Dennis

0

我嘗試過評論在生產服務器此行並沒有改變什麼,而不是這樣的評論只是改變時真亦假像:

config.force_ssl = false 
+0

@Dennis:你試過這個嗎? –

+0

嗨@mar​​ouenB,這也是一個非常好的留言。我試過了,但它似乎沒有改變任何東西。我覺得通常我的配置有很多錯誤,所以我無法確定。感謝您的建議 – Dennis

2

This gist表明,它可能是因爲的一個HSTS頭文件:

因此,如果您啓用了force_ssl一次,即使[if]稍後將配置值更改爲false,您用於打開y的瀏覽器ou [r]應用程序仍然會記住本網站(使用域標識)[並]要求[您]使用HTTPS,並自動將您重定向到HTTPS連接。

根據this page你可以在Firefox會在Chrome chrome://net-internals/#hstsabout:permissions和Safari中刪除~/Library/Cookies/HSTS.plist刪除您HSTS條目。

+1

這是我的確切問題,Chrome的解決方案(每個鏈接;考慮編輯您的答案,包括它)是去chrome:// net-internals /#hsts並從域中刪除域HSTS。 –

+1

我添加了一些關於刪除HSTS條目的說明。 – eremite

0

我有同樣的問題。解決方法對我來說是:

  1. 從aplication.rb
  2. 刪除config.force_ssl =真的Ubuntu 按Ctrl + Shift + Del鍵 =>清除瀏覽數據
0

我遇到這個問題(rails + puma + nginx)。每redirect_to被髮送到https,即使來自http

vhost.conf有這樣一行:

proxy_set_header X-Forwarded-Proto https; 

redirect_to工作正常改變這種後

proxy_set_header X-Forwarded-Proto http; 
相關問題