2011-10-21 2 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" 

내가 크롬에서 녹색 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; 
    } 
    } 

} 

어떤 문제를 해결할 수 있습니까? 이 문제에 대한하지만 내 nginx.conf에서 나는에
경향이 있습니다 올바른 접근 방식 인 경우

+0

[rack-ssl] (http://rubygems.org/gems/rack-ssl) 또는 이와 유사한 미들웨어를 사용하지 않는 이유는 무엇입니까? 쿠키가 SSL없이 전달되는 경우 어차피 firesheep 스타일의 공격에 취약합니다. – codatory

+0

@codatory 그들은 모든 경로에서 SSL을 강제합니다 (특정 경로에서만 SSL을 원합니다). –

+0

SSL을 사용하거나 사용하지 않고 직접 탐색 할 때 오류가 발생합니까? –

답변

1

는 잘 모르겠어요 앞 - 다시 내가 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을 통과하도록합니다. 이 해결 방법으로 간주하지만 왜 사용자를하고자 할 때 서버가 는 SSL을
을 적용하지 할 수있는 일반적인 방법으로

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

: 은 또한 당신은 위치 나 패턴 일치 기준에 대한 구체적이고 필터 할 수 있습니다)

자세한 내용은 nginx wiki의 HttpRewriteModule을 참조하십시오.

귀하의 사례에 도움이되기를 바랍니다.

+0

레일스 코드에서 SSL을 강제로 적용 할 수 있도록이 코드를 Rails 코드와 통합하려고합니다. 감사. –