Пришло лучше придерживаться того, что является текущим протоколом.
Если ваша производственная среда включает apache или nginx для статических активов и ssl, убедитесь, что заголовок https X-FORWARDED_PROTO отправлен работнику, когда клиентский запрос находится на порту https.
Таким образом, работники будут являться товаром, который ssl обрабатывается с внешней стороны и может генерировать ссылки с правильным протоколом.
Я знаю, что было бы лучше на ServerFault, чем здесь, но вот конфигурационный файл примера Nginx, вызвавший HTTPS и устанавливает правильные заголовки для управления Ssl в единорога работников:
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;
}
}
В целом, используя Rails.env.production? это путь. Его также можно использовать в файле before_filter, который перенаправляется на https, но это работает так же хорошо. –
Спасибо. По какой-то причине тот факт, что route.rb является обычным старым файлом Ruby, никогда не ударяет меня. Отлично. –
Я просто угадываюсь здесь, но не «Rails.env.development?» Быть «безопаснее»? Я хочу, чтобы мое производство было дефолтом, а разработка - исключением. – Mosselman