2009-06-10 4 views
9

사용자가 계정을 만들고 서비스를 사용할 수있는 webapp가 있습니다. 이제 사용자 정의 도메인 기능을 제공하기 위해 app.customer1web.com points_to myservice.com과 userid customer1 사용자 정의 도메인을 설정하고 나면 내 서비스가 컴퓨터에서 실행중인 것처럼 보입니다. 블로거, wp.com, tumblr과 같은 많은 서비스는 에게이 기능을 제공합니다.saname 소프트웨어에 cname forward 지원을 제공하는 방법

어떻게하면됩니까? 자바를 사용하여 웹 앱을 작성하고 있습니다. 요청이 들어 왔을 때 어떻게 도메인 이름을 사용자 ID에 매핑합니까?

답변

11

요청이 들어 오면 어떻게 도메인 이름을 사용자 ID에 매핑합니까?

분명히 어딘가에, 아마도 데이터베이스에 정보를 저장해야 할 것입니다.

  1. 열이있는 데이터베이스 테이블 domains을 추가

    • 고객 ID를
    • 이름
    • 활성 (1 NULL)
    • 도전

    에 대한 고유 키를 추가합니다 (이름, 활성)을 사용하여 도메인 이름이 매핑되는지 확인합니다. 한 번.

  2. 고객이 도메인을 추가하려고하면 active = NULL 및 challenge가 임의 문자열로 설정된 행을 추가하십시오.

    임의의 문자열을 고객에게 보여주고 사이트에 웹 페이지를 올리거나 더미 DNS 레코드를 만들어 도메인 소유권을 확인하십시오 (이것이 Google Apps의 방식입니다).

    관리자 연락처 또는 다른 방법으로 이메일을 보내어 소유권을 확인할 수 있습니다.

  3. 고객이 2 단계에서 지시 한 내용을 수행했다고 말하면 확인하고 활성 = 1, challenge = NULL로 설정합니다.

    도메인이 다른 고객을 위해 이전에 활성화 된 경우 해당 레코드를 삭제하거나 active = 0으로 설정하십시오.

  4. 고객에게 도메인에 대한 CNAME 레코드를 추가하고 도메인으로 전달하도록 안내합니다 (예 : hosted.myservice.com (Google에서는 Google Apps에 ghs.google.com을 사용함).

  5. 요청이 들어 오면

    가 자동으로 사용자 정의 도메인에 고객뿐만 아니라 <customername>.myservice.com, 의 형식으로 도메인을 제공 할 수 있습니다

더 좋은 방법

SELECT customerId FROM domains WHERE name=:requestDomain AND active=1 

을한다.

    여전히 로그인 페이지를 사용자 정의 할 수 있습니다 자신의 도메인을 사용하는 wan't하지 않는
  • 고객, 예를 들면 : 이것은 당신에게 두 가지 이점을 제공합니다 회사 로고가 있습니다.

  • 맞춤 도메인의 경우 일반 hosted.myservice.com 대신 고객에게 <customername>.myservice.com (으)로 전달하도록 고객에게 요청할 수 있습니다.

    이렇게하면 고객이 끝까지 아무것도 변경하지 않고도 여러 서버간에 고객을 가로로 분할 할 수 있습니다. 예를 들어 고객에게 EU 또는 미국에서 계정 호스팅을 허용할지 여부를 선택할 수있는 옵션을 제공 할 수 있습니다. 담당자가 변경하면 데이터를 전송하고 <customername>.myservice.com을 업데이트하면됩니다. 사용자 정의 도메인은 자동으로 작동합니다.

이렇게하려면, 당신이 (당신은 또한 당신이 개인 기록을 관리해야하는 경우에 후자의 기능을 필요로하지 않는 한) *.myservice.com에 대한 와일드 카드 DNS 레코드를 설정해야 할 것이다.

+0

나는 이것이 훌륭한 대답이라고 생각합니다. 나는 Jaka에게 고마워했다. – Upgradingdave

+1

도메인 소유권을 확인해야하는 이유가 무엇인가요? CNAME을 추가 할 수 있다면 충분히 증명되지 않습니까? –

+0

@ ChristianDavén CNAME 확인이 필요합니다! 예를 들어 tumblr을 사용할 수 있습니다 (이 문제가 있다고 생각합니다). 회사 ABC가 곧 출시 될 예정입니다. 그들은 blog.ABC.com으로 시작할 것입니다. Evil company XYZ는 tumblr을 계속 진행하고 CNAME blog.ABC.com에 ABC가하기 전에 블로그를 가리 키도록 등록합니다. 어떤 블로그가 가리켜 야하는지 확인하지 않고? –

0

나는 정말로 당신이하고 싶은 것을 이해하고 있는지 확신 할 수는 없지만 가능한 해결책을 제공해 주려고 노력하고 있습니다. (적어도 당신의 문제의 자바 부분에서는).

하나의 가능성은 모든 요청이 하나의 단일 서블릿 (web.xml)에 의해 처리되는 방식으로 응용 프로그램 서버를 설정하는 것입니다. 이 서블릿은 요청 url (HttpServletRequest.getRequestURI)을 찾고 사용자 이름을 추출 할 수 있습니다. 그런 다음 사용자에 대해 알며이 정보를 원하는대로 사용할 수 있습니다.

당신이하고 싶은 일에 많은 DNS가 포함되어 있다는 것을 알아 두십시오! (적어도 내가 이해하는만큼 요금만큼)

1

응용 프로그램에 대해 WildCard DNS Record을 설정하고 응용 프로그램 자체가 RequestURI를 확인하여 사용자가 들어오는 호스트 이름을 확인하게하십시오.

매우 모호한 답변이지만, 와일드 카드 기록을 설정 한 것처럼 들리 겠지만 호스트 이름을 확인하는 단일 기능이 최선의 방법입니다. 이렇게하면 고객이 가입 할 때마다 DNS 레코드를 설정할 필요가 없으며 응용 프로그램에 새로운 기능을 추가하는 것과 같은 다른 일을 직접 수행 할 시간이 있습니다!