簡體   English   中英

Rails:為什么我的服務器將http重定向到https

[英]Rails: Why does my server redirect http to https

我有一個我在Heroku上構建的rails應用程序,我已將其配置為在那里使用SSL。 現在我轉向AWS EC2,我想讓我的應用程序版本在沒有SSL的情況下運行。 完成后,我將在稍后添加SSL功能。

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

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

config.force_ssl = true

在config / environments / 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的配置,在我剛才的問題在這里有人建議我,有什么錯我的Nginx的配置和重定向從Rails的到來。 我懷疑是這種情況,因為我在Nginx中看不到可以強制執行重定向的任何內容,但如果您認為問題可能存在,那么您可以在上面的鏈接中看到很多相關代碼。

除了上面打印的force_ssl之外,Rails中的其他內容可能導致重定向?

謝謝大家的幫助。 如果您有任何疑問或需要更多信息,請與我們聯系!

這個要點表明它可能是因為HSTS標題:

因此,如果您啟用force_ssl一次,即使[if]您稍后將配置值更改為false,您之前用於打開[r]應用程序的瀏覽器仍會記住此網站(使用域名識別)[和]需要[您]使用HTTPS,並自動將您重定向到HTTPS連接。

根據此頁面,您可以通過chrome://net-internals/#hsts以及Firefox中的about:permissions和刪除Safari中的~/Library/Cookies/HSTS.plist來刪除您的HSTS條目。

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

也許您在application_controller.rb上使用了該方法,或者哪個控制器正在為根路徑提供服務而忘記了它。 你可以在Rails文檔中找到這種機制的例子: http//api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html

force_ssl(options = {})鏈接強制請求到此特定控制器或指定的操作在HTTPS協議下。

如果您因任何原因需要禁用它(例如開發),那么您可以使用:if或:unless條件。

class AccountsController < ApplicationController
  force_ssl if: :ssl_configured?

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

我之前嘗試過在生產服務器上評論這一行並且它沒有改變任何東西,所以不是評論只是將true更改為false,如:

config.force_ssl = false

我也遇到過這個問題(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;

我有同樣的問題。 我的解決方案是:

  1. aplication.rb中刪除config.force_ssl = true
  2. 對於ubuntu Ctrl + Shift + Del =>清除瀏覽數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM