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;
}
}
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. –
Dzięki. Z jakiegoś powodu fakt, że routes.rb jest zwykłym starym plikiem Ruby, nigdy mnie nie uderza. To jest świetne. –
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