Как настроить ssl на приложение rails 4? (nginx + пассажир)

У меня есть приложение для промежуточных рельсов, работающее с пассажиром на nginx. Я хочу обеспечить соединения с SSL. Я прочитал много ресурсов в Интернете, но мне еще предстоит сделать это на SSL.

До сих пор мой серверный блок на nginx.conf:

server {
     listen 80;
     listen 443 default deferred;
     server_name example.com;
     root /home/deploy/app/public;
     passenger_enabled on;

     passenger_set_cgi_param HTTP_X_FORWARDED_PROTO https;

     ssl on;
     ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5;
     ssl_prefer_server_ciphers on;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_certificate     /etc/ssl/server.crt;
     ssl_certificate_key /etc/ssl/server.key;
 }

Сайт работает, но не на HTTPS.

Ответы

Ответ 1

Я только что сделал деление на сам SSL и нашел статью на DigitalOcean о том, как это сделать. Это может быть listen 443 default deferred;, который согласно этой статье должен быть ssl not deferred.

Здесь используется блок nginx,

server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;

  listen 443 ssl;

  root /usr/share/nginx/html;
  index index.html index.htm;

  server_name your_domain.com;
  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;

  location / {
    try_files $uri $uri/ =404;
  }
}

UPDATE:

Теперь у меня есть собственный сайт, работающий на SSL. Наряду с вышеизложенным я просто сказал Rails, чтобы заставить SSL. В конфигурации вашей производственной среды

# ./config/environments/production.rb
config.force_ssl = true

По желанию вы можете добавить эти настройки в nginx.conf;

http {
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  keepalive_timeout 70;
}

ОБНОВЛЕНИЕ: 2015-09

Поскольку я написал этот ответ, я добавил несколько дополнительных вещей в конфигурацию nginx, которые, как я полагаю, также должны включать в себя. Добавьте в блок server следующее:

server {
  ssl_prefer_server_ciphers On;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

  add_header X-Frame-Options DENY;
}

Первые три строки (ssl_prefer_server_ciphers, ssl_protocols, ssl_ciphers) являются наиболее значимыми, так как они обеспечивают хорошие сильные настройки SSL.

X-Frame-Options предотвращает включение вашего сайта с помощью тегов <iframe>. Я ожидаю, что большинство людей выиграют от включения этой настройки.