2009-06-10 25 views
9

Tôi có một ứng dụng web nơi người dùng có thể tạo tài khoản của họ và sử dụng dịch vụ. Bây giờ tôi muốn cung cấp cho họ một cơ sở tên miền tùy chỉnh nơi app.customer1web.com points_to myservice.com với userid customer1 khi anh ta thiết lập miền tùy chỉnh, cho thế giới có vẻ như dịch vụ của tôi đang chạy trên máy của anh ấy. Nhiều dịch vụ như blogger, wp.com, tumblr cung cấp cho tính năng này.Cách cung cấp hỗ trợ chuyển tiếp cname cho phần mềm saas

làm cách nào để thực hiện điều đó? Tôi đang sử dụng java để viết ứng dụng web của mình. Làm cách nào để ánh xạ tên miền thành userid khi có yêu cầu?

Trả lời

11

Làm cách nào để ánh xạ tên miền thành userid khi có yêu cầu?

Rõ ràng, bạn sẽ phải lưu trữ thông tin đó ở đâu đó, rất có thể trong cơ sở dữ liệu.

  1. Thêm một bảng cơ sở dữ liệu domains với các cột:

    • ID khách hàng
    • tên
    • hoạt động (1 hoặc NULL)
    • thách thức

    Thêm chìa khóa duy nhất cho (tên, hoạt động) để đảm bảo tên miền được ánh xạ trên ly một lần.

  2. Khi khách hàng cố gắng thêm tên miền, hãy thêm hàng có hoạt động = NULL và đặt thử thách thành chuỗi ngẫu nhiên.

    Hiển thị chuỗi ngẫu nhiên cho khách hàng và yêu cầu họ đưa trang web lên trang web hoặc tạo bản ghi DNS giả để xác minh quyền sở hữu tên miền (đây là cách Google Apps thực hiện).

    Bạn có thể xác minh quyền sở hữu bằng cách gửi email tới người liên hệ quản trị hoặc theo cách khác.

  3. Khi khách hàng nói rằng anh ấy đã làm những gì bạn đã hướng dẫn họ thực hiện trong bướC# 2, hãy xác minh và đặt hoạt động = 1, challenge = NULL.

    Nếu tên miền trước đó đã hoạt động cho một số khách hàng khác, hãy xóa các bản ghi đó hoặc đặt hoạt động = 0.

  4. Yêu cầu khách hàng thêm bản ghi CNAME cho miền của họ và chuyển tiếp bản ghi đó tới miền của bạn, ví dụ: hosted.myservice.com (Google sử dụng ghs.google.com cho Google Apps).

  5. Khi có một request đến, làm

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

Cách tốt hơn có thể để tự động cung cấp cho khách hàng của bạn một miền trong định dạng của <customername>.myservice.com, ngoài miền tùy chỉnh. Điều này mang lại cho bạn hai lợi ích:

  • Khách hàng không muốn sử dụng tên miền riêng của họ vẫn có thể tùy chỉnh trang đăng nhập của họ, ví dụ: với logo của công ty.

  • Đối với tên miền tùy chỉnh, bạn có thể yêu cầu khách hàng chuyển tiếp chúng đến <customername>.myservice.com thay vì một số chung hosted.myservice.com.

    Điều này cho phép bạn phân vùng theo chiều ngang khách hàng giữa nhiều máy chủ mà không phải yêu cầu khách hàng thay đổi bất kỳ thứ gì về phía họ. Ví dụ: bạn có thể cung cấp cho khách hàng tùy chọn để chọn xem họ có muốn tài khoản của họ được lưu trữ ở EU hay Hoa Kỳ hay không. Khi họ thay đổi nó, chỉ cần chuyển dữ liệu của họ và cập nhật <customername>.myservice.com. Miền tùy chỉnh của họ sẽ hoạt động tự động.

Để làm điều này, bạn phải thiết lập một bản ghi DNS wildcard cho *.myservice.com (trừ khi bạn cũng cần tính năng thứ hai, trong trường hợp này bạn sẽ phải quản lý hồ sơ cá nhân).

+0

Tôi nghĩ đây là một câu trả lời hay. Tôi đã học được điều gì đó, cảm ơn, Jaka! – Upgradingdave

+1

Tại sao bạn phải xác minh quyền sở hữu tên miền? Nếu họ có thể thêm CNAME, thì đó có phải là bằng chứng đủ không? –

+0

@ ChristianDavén Bạn cần xác minh CNAME! Cho phép sử dụng tumblr như một ví dụ (mà tôi tin rằng có vấn đề này). Công ty ABC sắp ra mắt. Họ sẽ khởi chạy với blog.ABC.com. Công ty Evil XYZ đi trên tumblr và đăng ký blog CNAME.ABC.com để trỏ đến blog của họ trước khi ABC. Nếu không có xác minh mà blog nên nó trỏ đến? –

0

Tôi không hoàn toàn chắc chắn nếu tôi thực sự hiểu những gì bạn muốn làm nhưng tôi cố gắng cung cấp cho bạn một giải pháp có thể (ít nhất là cho phần Java của vấn đề của bạn).

Một khả năng là thiết lập máy chủ ứng dụng theo cách mà mọi yêu cầu được xử lý bởi một Servlet (web.xml) duy nhất. Servlet này có thể tìm hiểu về url yêu cầu (HttpServletRequest.getRequestURI) và trích xuất tên người dùng. Sau đó, bạn biết về người dùng và có thể sử dụng thông tin này cho bất cứ điều gì bạn muốn làm.

Lưu ý rằng có rất nhiều công cụ DNS liên quan đến những gì bạn muốn làm! (Ít nhất là giá vé như tôi hiểu.)

1

Một giải pháp mà bạn có thể sử dụng là thiết lập WildCard DNS Record cho ứng dụng của mình và yêu cầu ứng dụng kiểm tra RequestURI để biết tên người dùng đang đến.

Tôi biết đây là một câu trả lời rất mơ hồ, nhưng có vẻ như đã thiết lập bản ghi WildCard, với một chức năng duy nhất kiểm tra tên máy chủ là đặt cược tốt nhất của bạn. Bằng cách này, bạn không phải thiết lập một bản ghi DNS mỗi lần khách hàng đăng ký và bạn có nhiều thời gian hơn để tự mình làm những việc khác ... như thêm các tính năng mới vào ứng dụng của bạn!

Các vấn đề liên quan