2011-10-26 35 views
6

Tôi đã thêm force_ssl vào số ApplicationController và bị xóa sau, nhưng hiện tại, mọi yêu cầu vẫn được nhắc đến https. Tôi đã cố gắng thêm config.force_ssl = false vào tất cả các tệp cấu hình trong application.rbenvironments/development.rb, v.v. nhưng không hoạt động. Khi tôi khởi động lại máy chủ, các yêu cầu vẫn được chuyển thành https. Bất kỳ đầu mối?Rails 3.1 ssl được sử dụng ngay cả khi tôi vô hiệu hóa ssl?

Cập nhật: Điều này chỉ xảy ra khi tôi yêu cầu gốc của ứng dụng, ví dụ: http://localhost:3000/, tuy nhiên trong tệp config/routes.rb của tôi, tôi đã chỉ định url cho gốc rõ ràng: root :to => 'home#index'

Trả lời

11

Bạn đang thấy các hiệu ứng của HTTP Strict Transport Security 's max-age, được thiết lập bởi Rack::SSL (trong đó config.force_ssl = true thiết lập) thành nội dung nào đó cao.

+1

Bạn là chính xác và @Adrein_Lamonthe câu trả lời để xóa bộ nhớ cache của trình duyệt nó đã làm cho config.force_ssl = ứng dụng sai thay đổi hiệu quả trên máy tính của tôi – blnc

3

Ngoài việc khởi động lại ứng dụng, bạn cũng phải xóa bộ nhớ cache của trình duyệt.

0

yfeldblum là hoàn toàn chính xác. Vô hiệu hóa nó và làm cho chrome quên tiêu đề có thể là một nỗi đau.

Đây là những gì tôi đã kết thúc đưa vào cấu hình của tôi/application.rb

config.middleware.insert_before(Rack::Lock, Rack::SSL, hsts: false, exclude: proc { |env| 
    !env['PATH_INFO'].start_with?('/manage') 
}) 

** lưu ý A: HSTS: false là bit quan trọng

** lưu ý B: Tôi đang sử dụng 1,9 , vì vậy cú pháp băm của tôi có thể khác với cú pháp của bạn.

Ngoài ra, tôi phải mở url này trong Chrome chrome: // net-internals/# hsts và xóa các tên miền có tập hợp tiêu đề này.

Rất may điều này đã không làm cho nó để sản xuất, bởi vì Rack :: SSL đặt hết hạn rất dài trên tiêu đề này.

1

Đối với những người vẫn chưa rõ ràng, dưới đây là những gì tôi đã làm để thực hiện thủ thuật.

Trong application_controller.rb:

before_filter :expire_hsts 

[...] 
private 
    def expire_hsts 
    response.headers["Strict-Transport-Security"] = 'max-age=0' 
    end 

Trong production.rb

config.force_ssl = false 

Xóa cache của trình duyệt web của bạn và đó là nó!

0

nếu bạn đang sử dụng nginx thấy tùy chọn:

proxy_set_header X-Forwarded-Proto https; 

và vô hiệu hóa nó!

Các vấn đề liên quan