使用Rails 3.1的SSL:配置.Force_ssl = true在开发模式下不工作



我在Ubuntu上使用sqlite运行rails 3.1开发模式。rails服务器运行在端口3000上,我将nginx设置为proxy_pass端口80和443到端口3000。当我把config.force_ssl = true放入我的应用程序时。然后重新启动rails服务器,我得到如下错误:

    Secure Connection Failed
    An error occurred during a connection to localhost:3000.
    SSL received a record that exceeded the maximum permissible length.
    (Error code: ssl_error_rx_record_too_long)
    The page you are trying to view can not be shown because the authenticity of the received data could not be verified.
    Please contact the web site owners to inform them of this problem. Alternatively, use the command found in the help menu to report this broken site.

当我将其更改回config.force_ssl = false并重新启动rails服务器时,我仍然得到一个错误,[2011-12-30 09:48:02] ERROR bad URI 9Wx0Fe���h=9��ݔ|�#��)�/6x00x00Hx00��'。在rails控制台中。这就消失了,一切都恢复正常,如果我也清除浏览器缓存。但是我怎么让force_ssl = true工作呢?

这是我的Application.rb:

    module Regi
      class Application < Rails::Application
        # Settings in config/environments/* take precedence over those specified here.
        # Application configuration should go into files in config/initializers
        # -- all .rb files in that directory are automatically loaded.
        config.generators do |g|
          g.template_engine :haml
        end
        config.force_ssl = true
      end
    end         
下面是/etc/nginx/sites-enabled/default:
server {
    #listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6
    root /usr/share/nginx/www;
    index index.html index.htm;
    # Make site accessible from http://localhost/
    server_name localhost;
    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to index.html
            proxy_pass      http://localhost:3000;  
            try_files $uri $uri/ /index.html;
    }

    #error_page 404 /404.html;
    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    #       root /usr/share/nginx/www;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ .php$ {
    #       fastcgi_split_path_info ^(.+.php)(/.+)$;
    #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #       fastcgi_pass 127.0.0.1:9000;
    #       fastcgi_index index.php;
    #       include fastcgi_params;
    #}
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /.ht {
    #       deny all;
    #}
}
# HTTPS server
server {
    listen       443;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    ssl    on;
    ssl_certificate    /usr/local/conf/ssl_keys/server.crt;
    ssl_certificate_key    /usr/local/conf/ssl_keys/server.key;
    location / {
        proxy_pass        http://localhost:3000;
        proxy_set_header  X-Real-IP  $remote_addr;
        # root   html;
        # index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

我在配置nginx ssl服务器时遇到了完全相同的错误信息。那是因为我没有ssl证书和密钥。在你的nginx配置文件中,我注意到有crt和key。你确定crt和钥匙都没问题吗?如果您不确定,可以尝试下面的链接来创建self_assigned crt。http://devcenter.heroku.com/articles/ssl-certificate-self

注。我想附加这个答案作为一个小评论,但似乎我没有这个权限

ActionController::ForceSSL告诉它在'development'模式时不要重定向。

https://github.com/rails/rails/blob/391e6a47dbd46fdce0a472819e8d27792cc91984/actionpack/lib/action_controller/metal/force_ssl.rb气密性好

相关内容

最新更新