2011-10-21 12 views
1

I持って強制SSLためHerokuの(生産)に正常に動作します次のコード:のnginxとSSL施行

# /config/routes.rb 
scope protocol: 'https://', constraints: { protocol: 'https://' } do 
    resource :user 
    resource :session 
end 

私はセットアップにSSLでのnginxと乗客を使用して開発マシンをしようとしていますしかし、私が取得:HTTPSを使用してアプリケーションの他のセクションへの参照時に

Action Controller: Exception 
No Route Matches [GET] "/session/new" 

は私がChromeで緑のSSLを取得するので、SSLが機能している表示されます。なんらかの理由で、ルートを強制することは正しく一致しません。私のnginx.confは:

worker_processes 4; 

events { 
    worker_connections 1024; 
} 

http { 

    gzip on; 
    sendfile on; 

    include mime.types; 

    ssl_certificate  cert.crt; 
    ssl_certificate_key cert.key; 

    ssl_session_cache shared:SSL:10m; 
    ssl_session_timeout 10m; 

    keepalive_timeout 60; 

    rack_env development; 
    passenger_user kevin; 
    passenger_root /Users/kevin/.rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.9; 
    passenger_ruby /Users/kevin/.rvm/wrappers/default/ruby; 

    server { 
    listen 80; 
    listen 443 ssl; 
    server_name local.demo; 
    location/{ 
     root /Users/kevin/Sites/demo/public; 
     passenger_enabled on; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-Ssl on; 
     proxy_set_header X-Forwarded-Proto https; 
    } 
    } 

} 

どのように修正するのですか?

+0

[rack-ssl](http://rubygems.org/gems/rack-ssl)などのミドルウェアを使用しない理由は何ですか?あなたのクッキーがまったくSSLなしで渡されている場合は、とにかくファイアシープスタイルの攻撃に脆弱です。 – codatory

+0

@codatory彼らはすべてのルートでSSLを強制します(私は特定のルートでのみSSLが必要です)。 –

+0

SSLの有無にかかわらず直接ナビゲートするとエラーが発生しますか? –

答えて

1

私はこれがあなたの問題のための適切なアプローチであるが、私のnginx.confに私はhttpsにデフォルトしたいフォア-書き換えるURL空間に
を傾向があるだろうかはわからない:

server { 
    listen 80; 
    server_name local.demo; 
    rewrite ^(.*)$ https://local.demo$1 permanent; 
} 

server { 
    listen 443 ssl; 
    server_name local.demo; 
    location/{ 
    root /Users/kevin/Sites/demo/public; 
    passenger_enabled on; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-Ssl on; 
    proxy_set_header X-Forwarded-Proto https; 
    } 
} 

この設定では、http://local.demo/のすべての要求がhttps://local.demoになります。 代わりにあなたは場所やパターンマッチ基づいて、より具体的かつフィルタとすることができます。

location ~ ^/sslrequired/(.*)$ { 
    rewrite ^(.*)$ https://local.demo/$1 permanent; 
} 

それが回避策と考えるが、なぜあなたは、ユーザーをしようとするとき、サーバーが
にSSLを強制させないことができる汎用的な方法で)

詳細については、nginx wikiのHttpRewriteModuleを参照してください。

私はこれがあなたの場合に役立つことを願っています。

+0

私は実際にルートファイルからSSLを強制できるように、これをRailsコードと統合しようとしています。ありがとう。 –