Jak zapewnić obsługę CNAME forward dla oprogramowania saas

Mam webapp, gdzie użytkownicy mogą utworzyć swoje konto i korzystać z usługi. Teraz chcę dać im obiekt domeny niestandardowej, gdzie app.customer1web.com points_to myservice.com z userid customer1 po skonfigurowaniu niestandardowej domeny, dla świata wygląda na to, że moja usługa działa na jego maszynie. Wiele serwisów takich jak blogger, wp.com, tumblr give ta funkcja.

Jak to zrobić? Używam Javy do pisania mojej aplikacji internetowej. Jak mapować nazwę domeny do identyfikatora userid kiedy przychodzi Prośba?

Author: Thejesh GN, 2009-06-10

3 answers

Jak mapować nazwę domeny na userid, gdy pojawi się żądanie?

Oczywiście, będziesz musiał przechowywać te informacje gdzieś, najprawdopodobniej w bazie danych.

  1. Dodaj tabelę bazy danych domains z kolumnami:

    • customerId
    • Nazwa
    • active (1 lub NULL)
    • wyzwanie

    Dodaj unikalny klucz (name, active), aby upewnić się, że nazwa domeny jest mapowana tylko raz.

  2. Gdy klient próbuje aby dodać domenę, Dodaj wiersz z active = NULL I challenge ustawiony na losowy ciąg znaków.

    Pokaż losowy ciąg do klienta i poproś go, aby umieścić stronę internetową z nim na stronie lub utworzyć fałszywy rekord DNS z nim w celu sprawdzenia własności domeny (tak robi to Google Apps).

    Możesz zweryfikować własność, wysyłając wiadomość e-mail do kontaktu administracyjnego lub w inny sposób.

  3. Kiedy klient mówi, że zrobił to, co poleciłeś mu w Kroku # 2, sprawdź to i ustaw active = 1, challenge=NULL.

    Jeśli domena była wcześniej aktywna dla innego klienta, usuń te rekordy lub ustaw active=0.

  4. Poproś Klienta o dodanie rekordu CNAME dla swojej domeny i przesłanie go do Twojej domeny, np. hosted.myservice.com (Google używa ghs.google.com dla Google Apps).

  5. Gdy pojawi się żądanie, wykonaj

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

Lepszym sposobem może być automatyczne zaoferowanie klientom domeny w formacie <customername>.myservice.com, oprócz niestandardowych domen. Daje to dwie korzyści:

  • Klienci, którzy nie chcą korzystać z własnej domeny, mogą dostosować stronę logowania, np. z logo firmy.

  • W przypadku domen niestandardowych możesz poprosić Klienta o przesłanie ich do <customername>.myservice.com zamiast do ogólnego hosted.myservice.com.

    Umożliwia to poziomą partycję klientów między wieloma serwerami bez konieczności proszenia klientów o zmianę czegokolwiek po ich stronie. Na na przykład możesz dać klientom możliwość wyboru, czy chcą mieć swoje konto hostowane w UE, czy w USA. Kiedy to zmienią, po prostu prześlij swoje dane i zaktualizuj <customername>.myservice.com. Ich niestandardowa domena będzie działać automatycznie.

Aby to zrobić, musisz skonfigurować rekord DNS dla *.myservice.com (chyba że potrzebujesz również tej drugiej funkcji, w którym to przypadku będziesz musiał zarządzać pojedynczymi rekordami).

 18
Author: Jaka Jančar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-13 11:25:38

Jednym z rozwiązań, którego możesz użyć, jest skonfigurowanie rekordu DNS WildCard dla Twojej aplikacji, a sama aplikacja sprawdzi żądanie, aby zobaczyć, jaką nazwę hosta wprowadzają użytkownicy.

Wiem, że jest to bardzo niejasna odpowiedź, ale brzmi to jak skonfigurowanie rekordu wieloznacznego, z jedną funkcją sprawdzającą nazwę hosta jest najlepszym rozwiązaniem. W ten sposób nie musisz konfigurować rekordu DNS za każdym razem, gdy klient się zarejestruje, i masz więcej czasu dla siebie, aby zrobić inne rzeczy... jak dodawanie nowych funkcji do aplikacji!

 2
Author: EstelS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-11 18:42:15

Nie jestem do końca pewien, czy naprawdę rozumiem, co chciałbyś zrobić, ale staram się dać ci możliwe rozwiązanie (przynajmniej w części Java Twojego problemu).

Jedną z możliwości byłoby skonfigurowanie serwera aplikacji w taki sposób, aby każde żądanie było obsługiwane przez jeden Servlet (web.xml). Ten servlet może dowiedzieć się o URL żądania (HttpServletRequest.getRequestURI ) i wyodrębnij nazwę użytkownika. Wtedy wiesz o użytkowniku i możesz wykorzystać te informacje do dowolnego chciałbyś to zrobić.

Pamiętaj, że istnieje wiele DNS-stuff zaangażowanych w to, co chcesz zrobić! (Przynajmniej tak jak rozumiem.)

 0
Author: zlajo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-10 14:31:12