복붙노트

[RUBY-ON-RAILS] 루트 도메인에 Heroku가 SSL

RUBY-ON-RAILS

루트 도메인에 Heroku가 SSL

내 Heroku가 응용 프로그램에 대한 설정 SSL에 노력하고 있습니다. 나는 호스트 기반의 SSL의 추가 기능을 사용하고 있습니다. 에게 Heroku 설명서는 다음을 주장한다 :

Hostname based SSL will not work with root domains as it relies on CNAME 
aliasing of your custom domain names. CNAME aliasing of root domains is 
an RFC violation. 

내가 WWW의 하위 도메인을 사용하여 사이트, 즉 https://www.foo.com에 액세스 할 때 예상 모든 것이 잘 작동한다. 제시 한 인증서가 heroku.com입니다 나는이 https://foo.com에 액세스 할 때 브라우저를 뿌려줍니다.

나는이 문제를 해결하기 www.foo.com에 foo.com에 대한 트래픽을 리디렉션해야한다는 결론을 내렸다. 나는 다음과 접근 방법을 고려하고있다 :

1) 기초 재를 DNS

는 DNS 공급자 Zerigo 리디렉션 기록을 지원합니다. 나는 SO에 비슷한 주제에 대해 질문을 가로 질러왔다. 나는 (Zerigo 문서가이 확인) 만 HTTP 리디렉션 작동 솔루션을 시도했다.

내 Zerigo 구성 :

foo.com      A             x.x.x.x
foo.com      redirect      http://www.foo.com
www.foo.com  CNAME         zzz.amazonaws.com

2) 계 랙 리디렉션

리디렉션을 수행하기 위해 랙 기반의 미들웨어를 추가합니다. 정식 호스트 보석 같은 지원을 제공합니다.

use CanonicalHost do
  case Rails.env.to_sym
    when :staging     then 'staging.foo.com'
    when :production  then 'www.foo.com'
  end
end

(개월 IP 기반의 SSL 당 $ 100 금지 전환) 이것에 대한 더 나은 솔루션이 있는지 궁금

해결법

  1. ==============================

    1.와우 ...이 영원히 나를 데려, 웹에 대한 정보의 무리 잘못이었다. 심지어에게 Heroku의 문서는이 가능했다 나타 내기 위해 보이지 않았다.

    와우 ...이 영원히 나를 데려, 웹에 대한 정보의 무리 잘못이었다. 심지어에게 Heroku의 문서는이 가능했다 나타 내기 위해 보이지 않았다.

    그것은 내가 자신이 만든 DNS 레코드의 새로운 종류의 추측 DNSimple의 ALIAS 레코드와 작동합니다하지만 예스퍼 J의 대답은 올바른 방향으로 힌트를 제공합니다. 내가 그들을 그냥이 레코드 유형을 얻을에 걸쳐 내 DNS 서비스를 전환했다 (EasyDNS로 이전했다).

    나는 내 말은 "작품"을 말할 때 명확히하려면 :

    그것은 다음 URL의 모든 (경고없이 https://foo.com로 리디렉션) 작동

    중요한 비트를 요약합니다.

    production.rb 세트

    config.force_ssl = true
    

    application_controller.rb 추가에

    before_filter :check_domain
    
    def check_domain
      if Rails.env.production? and request.host.downcase != 'foo.com'
        redirect_to request.protocol + 'foo.com' + request.fullpath, :status => 301
      end
    end
    

    이 마지막 일 것 같다! 핵심 부분은 ALIAS의 DNS 레코드 것으로 보인다. 나는 그것이 성숙 / 얼마나 신뢰할 수있는 사람이 알고 있다면 그것이 작동하는 방법에 대한 자세한 내용은 호기심, 그리고 것입니다. 하지만 트릭을 할 것으로 보인다.

  2. ==============================

    2.DNSimple는 이러한 요구를 해결하기 위해 별칭 레코드 유형을 제공합니다. 당신은 CNAME을 가리키는 (존 정점 a.k.a) 루트 도메인의 별칭을 만들 수 있습니다. 여기에 대해 자세히 알아보기 :

    DNSimple는 이러한 요구를 해결하기 위해 별칭 레코드 유형을 제공합니다. 당신은 CNAME을 가리키는 (존 정점 a.k.a) 루트 도메인의 별칭을 만들 수 있습니다. 여기에 대해 자세히 알아보기 :

    http://blog.dnsimple.com/introducing-the-alias-record/

  3. ==============================

    3.DNS의 리디렉션 인바운드 요청이 HTTP 또는 HTTPS 그래서 원래의 프로토콜을 유지할지 여부 상관하지 것이다 - 그래서 http://www.foo.com에 http://foo.com 리디렉션 및 HTTPS에 대해 동일합니다.

    DNS의 리디렉션 인바운드 요청이 HTTP 또는 HTTPS 그래서 원래의 프로토콜을 유지할지 여부 상관하지 것이다 - 그래서 http://www.foo.com에 http://foo.com 리디렉션 및 HTTPS에 대해 동일합니다.

    당신은 www가 당신이 발견 한 보석 또는 다른 랙 리디렉션 보석을 통해 또는 경우 응용 프로그램 내에서 작업을 수행해야합니다. 문제를 사용하여 IP 기반의 SSL의 부가 기능입니다.

  4. ==============================

    4.당신이 염두에두고 같은 것 한 가지는 사이트의 두 버전 두 버전에 액세스 할 경우 구글의 힘 지수 (WWW 대 루트)입니다. 당신은 고통을 보수 할 수 있습니다 것을을 처리하기 위해 설치 conicals해야합니다.

    당신이 염두에두고 같은 것 한 가지는 사이트의 두 버전 두 버전에 액세스 할 경우 구글의 힘 지수 (WWW 대 루트)입니다. 당신은 고통을 보수 할 수 있습니다 것을을 처리하기 위해 설치 conicals해야합니다.

    내 DNS 설정에서 나는 URL을 설정 / 앞으로 기록 (DNS의 단순)

    URL foo.com     3600        http://www.foo.com
    

    CNAME 설정은 WWW에 대한 설정을 할 필요가

    CNAME   www.foo.com 3600        providedsslendpoint.herokussl.com
    

    나는 또한 나의 뿌리에 대한 설정 및 별칭에 있었다

    ALIAS   foo.com 3600        providedsslendpoint.herokussl.com
    

    그럼 난 단순히 ENV 변수 ENV [ 'SITE_HOST'] (여기서 SITE_HOST = www.foo.com 또는 내가 정의 할 수 있습니다 무엇이든)와 foo.com을 교체하기로 결정했습니다. 내 Heroku가 구성 또는 내 .env의 파일 (https://github.com/bkeepers/dotenv 참조)를 통해이를 제어 할 수 있습니다. 그런 식으로, 내가 다른 환경에서 발생하는 제어 할 수 있습니다.

    예를 들어, 내 테스트 애플 리케이션은 나를 위해 잘 작동, 그래서 그것은 또한 자신의 SSL 엔드 포인트가있는 URL로 test.foo.com를 사용합니다. 이것은 또한뿐만 아니라 스테이징 또는 QA 특정 환경을 만들기 위해 확장 할 수 있습니다.

      before_filter :check_domain
    
      def check_domain
        if Rails.env.production? || Rails.env.testing? and request.host.downcase != ENV['SITE_HOST']
          redirect_to request.protocol + ENV['SITE_HOST'] + request.fullpath, :status => 301
        end
      end
    

    지금부터, 강제 SSL과 최종 사용자는 항상 액세스 WWW. 오래된 링크는 작은 끊지 있지만 아무 것도 눈에 띄는을 겪게됩니다.

  5. ==============================

    5.레일 부분에서 재 지정을하기 위해서는 (3+ 레일에 작품)은이 같은 라우터 층에서 발생하게 더 제정신이 될 것입니다 :

    레일 부분에서 재 지정을하기 위해서는 (3+ 레일에 작품)은이 같은 라우터 층에서 발생하게 더 제정신이 될 것입니다 :

    Rails.application.routes.draw do
    
      match '/*splat' => redirect { |_, request| request.url.sub('//www.', '//') }, :constraints => { :subdomain => 'www' }
    
      # ...
    
    end
    
  6. ==============================

    6.이전 GoDaddy와 사용하는 사람들에게 Heroku 사용자의 경우, 그냥에서 GoDaddy에서 cloudflare에 걸쳐 DNS 포팅을 완료합니다. 그리고 HTTPS 지금은 잘 작동된다.

    이전 GoDaddy와 사용하는 사람들에게 Heroku 사용자의 경우, 그냥에서 GoDaddy에서 cloudflare에 걸쳐 DNS 포팅을 완료합니다. 그리고 HTTPS 지금은 잘 작동된다.

    GoDaddy이 DNS는 Heroku가와 호환되지 않습니다. 그리고이 때문에하는 것입니다 :

    설정은 매우 간단합니다.

    첫째는 고대 디 DNS 관리자에 cloudflare의 네임 서버를 추가합니다. 다음은 몇 가지 예입니다 :

    다음으로, 당신은 두 더 많은 단계가 필요합니다.

    당신이 레일을 사용하는 경우 = 세트 config.force_ssl에 반드시 설정 / 환경 / production.rb에서 진실

  7. from https://stackoverflow.com/questions/6701549/heroku-ssl-on-root-domain by cc-by-sa and MIT license