2012-05-03 30 views
10

Tôi muốn tạo một ứng dụng SaaS ví dụ, nhờ đó người dùng có thể đăng ký, tạo trang web, sử dụng mẫu và/hoặc tùy chỉnh chúng với css tùy chỉnh, phục vụ trang web của họ tắt tên miền tùy chỉnh.Cách phân phát miền tùy chỉnh trỏ đến tên miền phụ trong Saas App

Tôi đã xem xét lưu mẫu trên S3/CDN khác, cùng với tệp phương tiện/tệp định kiểu/tệp js. Trong khi tất cả là kỹ thuật có thể (thực tế? Có thể gây tranh cãi). Dù sao, tôi đã có một thời gian khó khăn để tìm hiểu làm thế nào các trang web sẽ được phục vụ ra khỏi tên miền tùy chỉnh trong trường hợp này? Ví dụ: khi họ đăng ký, họ có thể nhận được địa chỉ subdomain.domain.com. Tuy nhiên, làm thế nào để họ chỉ customerdomain.com để khi customerdomain.com được nhập vào, nó phục vụ cùng một nội dung như customerdomain.domain.com và URL vẫn customerdomain.com

Thêm vào đó, nếu tôi muốn có một "feature" trong đó, lĩnh vực tùy chỉnh có thể là một tính năng thanh toán. Làm thế nào để hạn chế nó cho người dùng trả phí?

Thông thường khi, chúng tôi thiết lập trang web, chúng tôi chỉ định trang web đó trong tệp cấu hình máy chủ ảo (apache) và cung cấp bí danh, vì vậy, tìm kiếm và cung cấp các bí danh đó. Trong trường hợp này, tôi không muốn có một tệp vhost riêng cho từng người đăng ký. Có cách nào khác không? Làm thế nào tôi có thể lập trình này? Có bất kỳ gotchas để được nhận thức?

Một giải pháp mà tôi đã thấy là để máy chủ phân phát miền ký tự đại diện, ví dụ: *.domain.com và vhost riêng cho mỗi miền tùy chỉnh, tuy nhiên tôi muốn tránh nếu có thể.

Cảm ơn.

Trả lời

6

Miền tùy chỉnh thường được thực hiện thông qua bản ghi DNS CNAME (sắp xếp liên kết tượng trưng cho bản ghi DNS). Bạn nói với khách hàng của mình (người thường kiểm soát customerdomain.com) để tạo bản ghi CNAME nói rằng customerdomain.com là bí danh cho customerdomain.domain.com. Sau đó, bạn cần phải thiết lập máy chủ của riêng bạn để giải thích các yêu cầu đến customerdomain.com giống như nó sẽ xử lý các yêu cầu đến customerdomain.domain.com.

Tùy thuộc vào cách bạn phân phát tên miền phụ của bạn, điều này có thể được thực hiện theo một vài cách khác nhau.

Nếu bạn có tệp vhost cho mỗi khách hàng, bạn cần thêm chỉ thị "ServerAlias" cho miền tùy chỉnh mà ứng dụng khách của bạn đã cung cấp.

Nếu bạn đang mã hóa điểm nhập thông qua máy chủ ứng dụng của riêng bạn (nói, đọc tiêu đề HTTP "Máy chủ" từ PHP và sau đó đặt tên khách hàng từ đó) thì bạn cần phải điều chỉnh mã đó để giải thích các yêu cầu cho bên ngoài các miền theo cơ sở dữ liệu của riêng bạn về miền tùy chỉnh. Bạn thậm chí có thể sử dụng DNS thẳng cho việc này!

Something trên dòng:

if http "host" header does not end in domain.com: 
    cname = get_cname_record(http "host" header value) 
    if cname does not end in domain.com: 
     return error 404 
    else: 
     site = first part of cname 
else: 
    site = first part of http "host" header 

Sau đó, bạn có thể sử dụng DNS là "cơ sở dữ liệu tên miền tuỳ chỉnh" của bạn. Hãy chắc chắn rằng bạn đang sử dụng một bộ nhớ cache DNS mặc dù, như những truy vấn sẽ được thực hiện trên mỗi yêu cầu duy nhất.

+0

cảm ơn, mã psuedocode của bạn đã giúp hiểu rõ giải pháp. Giới thiệu về bộ nhớ cache DNS, trên một máy chủ là nó không phải là mặc định? Tôi có nghĩa là các truy vấn DNS được lưu trữ bởi hệ điều hành (ubuntu). Tôi có cần phải làm gì thêm cho điều đó không? – Nasir

+0

Điều đó tùy thuộc vào cách bạn triển khai "get_cname_record". Nếu bạn sử dụng gethostbyaddr() hoặc một dẫn xuất (tùy chọn có khả năng nhất), hệ thống của bạn thường cung cấp một số loại bộ nhớ đệm đã có. Nhưng làm điểm chuẩn nó bằng cách lặp lại một loạt các tra cứu để bạn không rơi vào một cái bẫy với điều này. Tôi đã nhìn thấy nó xảy ra, vì vậy chỉ là một FYI. – GomoX

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