2009-10-05 15 views

Odpowiedz

15

można jednoznacznie zdefiniować je osobno i testy dla środowiska

if Rails.env.production? 
    map.resources :purchases, :requirements => {:protocol => "https"} 
    else 
    map.resources :purchases 
    end 

Uwaga, jeśli jesteś na starszych wersjach Rails, użyj ENV [ „”] == RAILS_ENV produkcja zamiast

+1

Ogólnie, używając Rails.env.production? jest drogą do zrobienia. Można go również użyć w filtrze before_filter, który przekierowuje do https, ale działa to równie dobrze. –

+1

Dzięki. Z jakiegoś powodu fakt, że routes.rb jest zwykłym starym plikiem Ruby, nigdy mnie nie uderza. To jest świetne. –

+1

Po prostu zgaduję, ale czy "Rails.env.development?" Nie byłoby "bezpieczniejsze"? Chciałbym, aby moja produkcja była domyślna, a rozwój był wyjątkiem. – Mosselman

0

Nadszedł lepiej trzymać się obecnego protokołu.

Jeśli środowisko produkcyjne obejmuje apache lub nginx dla zasobów statycznych i ssl, upewnij się, że nagłówek https X-FORWARDED_PROTO jest wysyłany do procesu roboczego, gdy zapytanie klienta znajduje się na porcie https.

W ten sposób robotnicy będą sprawcami, że ssl jest obsługiwany zewnętrznie i może generować łącza z prawidłowym protokołem.

wiem, że byłoby lepiej na ServerFault niż tutaj, ale tutaj jest to plik konfiguracyjny przykład nginx że zmusza https i ustawia odpowiednie nagłówki do zarządzania SSL pracowników Unicorn:

upstream WEBAPP_NAME { 
     server unix:/path/to/webapp/tmp/sockets/unicorn.sock fail_timeout=0; 
    } 

server { 
    listen  4343; 
    server_name example.com; 

    root /path/to/webapp/public; 
    access_log /path/to/logs/nginx-access.log; 
    error_log /path/to/logs/nginx-error.log; 
    rewrite_log on; 

    ssl     on; 
    # redirect when http request is done on https port 
    error_page 497 https://example.com:4343$request_uri; 
    ssl_certificate  cert.pem; 
    ssl_certificate_key cert.key; 

    ssl_session_timeout 5m; 

    ssl_protocols SSLv2 SSLv3 TLSv1; 
    ssl_ciphers HIGH:!aNULL:!MD5; 
    ssl_prefer_server_ciphers on; 

location ~ ^/assets/ { 
     expires 1y; 
     add_header Cache-Control public; 

     add_header ETag ""; 
     break; 
    } 


location/{ 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_set_header X-FORWARDED_PROTO https; 

      proxy_pass http://WEBAPP_NAME; 
      proxy_redirect default; 
     } 
} 
1

Dodaj stała na górę z pliku trasy jak:

ROUTES_PROTOCOL = (Rails.env.production? ? "https" : "http") 

a potem po prostu zrobić:

:protocol => ROUTES_PROTOCOL 

dla tras wymagających https

Powiązane problemy