如何在rails 4应用程序上设置ssl?(nginx +乘客)

use*_*575 16 ssl ruby-on-rails passenger nginx

我有一个与nginx上的乘客一起运行的临时rails应用程序.我想保护与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;
 }
Run Code Online (Sandbox Code Playgroud)

该网站正在运行,但不在HTTPS上.

Mic*_*ook 28

我刚刚自己决定使用SSL,并在DigitalOcean网站上发现了一篇关于如何做到这一点的文章.它可能是listen 443 default deferred;,根据那篇文章应该ssl不是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;
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:

我现在有自己的网站在SSL上运行.除了上面我刚刚告诉Rails强制使用SSL.在你的生产环境配置;

# ./config/environments/production.rb
config.force_ssl = true
Run Code Online (Sandbox Code Playgroud)

或者,您可以在nginx.conf; 添加这些设置;

http {
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  keepalive_timeout 70;
}
Run Code Online (Sandbox Code Playgroud)

更新: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;
}
Run Code Online (Sandbox Code Playgroud)

前三行(ssl_prefer_server_ciphers,ssl_protocols,ssl_ciphers)是最进口,因为他们要确保你有一个好强的SSL设置.

X-Frame-Options可以防止您的网站被<iframe>标记包含在内.我希望大多数人都会受益于此设置.