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

时间:2014-08-04 09:58:20

标签: ruby-on-rails ssl nginx passenger

我有一个在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;
 }

该网站正在运行,但未在HTTPS上运行。

1 个答案:

答案 0 :(得分: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;
  }
}

<强>更新

我现在在SSL上运行自己的网站。除了上面我刚刚告诉Rails强制使用SSL。在您的生产环境config;

# ./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_ciphersssl_protocolsssl_ciphers)是最重要的,因为它们可确保您拥有良好的强SSL设置。

X-Frame-Options会阻止您的网站通过<iframe>代码加入。我希望大多数人都会受益于此设置。