8

Tôi không biết làm cách nào khác để nói điều đó vì vậy tôi sẽ chỉ giải thích kịch bản lý tưởng của tôi và hy vọng bạn có thể giải thích cho tôi cách thực hiện ...Cách tạo Ứng dụng SaaS?

Tôi đang tạo một ứng dụng với Zend Khung sẽ được lưu trữ với DreamHost. Ứng dụng sẽ được lưu trữ trên miền riêng của nó (ví dụ: example-app.com). Về cơ bản, người dùng có thể đăng ký, lấy tên miền của riêng họ sampleuser.example-app.com hoặc example-app.com/sampleuser trỏ đến, ví dụ như ví dụ riêng của ứng dụng, đây thực sự là một ví dụ phân phát nội dung khác nhau dựa trên url.

Cuối cùng, tôi muốn người dùng của mình có thể tạo tên miền riêng của họ (như foobar.com) trỏ tới sampleuser.example-app.com, như vậy khách truy cập đến foobar.com không nhận thấy rằng trang web là thực sự được phục vụ từ example-app.com.

Tôi không biết cách thực hiện hầu hết nội dung đó. Làm thế nào để quá trình này làm việc? Tôi có cần phải làm một số công cụ sôi nổi với Apache hoặc điều này có thể được thực hiện với máy chủ của bên thứ ba, như DreamHost không?

Cập nhật: Cảm ơn lời khuyên! Tôi đã quyết định cắn đạn và nâng cấp gói lưu trữ của mình để sử dụng các tên miền phụ ký tự đại diện. Nó rẻ hơn tôi mong đợi! Tôi cũng đã tìm hiểu về các chương trình người bán lại miền, như opensrs.com, có API của riêng họ. Tôi nghĩ việc sử dụng một trong các API này sẽ là giải pháp cho vấn đề đăng ký miền của tôi.

Trả lời

10

Tên miền phụ dễ dàng. Trong môi trường lưu trữ, trong hầu hết các trường hợp, apache được cấu hình để bắt tất cả các cuộc gọi tên miền phụ bên dưới miền chính. Bạn chỉ cần có một ký tự đại diện DNS được xác định, vì vậy * .example-app.com được trỏ đến IP của máy chủ của bạn. Sau đó, trang web của bạn sẽ bắt tất cả các cuộc gọi đến những tên miền phụ đó.

Các miền khác rất khó. Chúng cần được cấu hình như các host ảo trong Apache - xem http://httpd.apache.org/docs/1.3/vhosts/name-based.html - điều đó có nghĩa là sẽ khó để tự động hóa, đặc biệt là trong môi trường lưu trữ - trừ khi máy chủ của bạn cung cấp cho bạn một số API để thực hiện điều đó (kịch bản dễ dàng và khả thi hơn) một IP đặc biệt được gán cho trang web của bạn, sau đó bạn có thể bắt tất cả với Apache của mình - có thể cấu hình bằng bảng điều khiển lưu trữ của bạn hoặc hoạt động ngoài hộp - và sau đó chỉ cần trỏ máy chủ DNS vào IP của bạn).

Sau đó, sau khi bạn đã cấu hình Apache của bạn để trỏ tất cả các cuộc gọi cần thiết để trang web của bạn, bạn có thể differnetiate phân vùng áp dụng cho mỗi tên miền phụ theo cách này:

  • lấy tiêu đề máy chủ từ yêu cầu HTTP
  • có một bảng cơ sở dữ liệu chứa tất cả tên miền phụ bạn đang phục vụ
  • tra cứu bảng cơ sở dữ liệu đó để xác định cá thể hoặc id người dùng và sử dụng nó sau này để lọc dữ liệu/hoặc chọn cơ sở dữ liệu. mỗi lược đồ ứng dụng ".

Chúc may mắn :)

+1

Tôi chạy một ứng dụng với một kiến ​​trúc tương tự và nó hoạt động như mô tả. Hãy chắc chắn kiểm tra xem bạn có thể thiết lập một máy chủ ký tự đại diện (* .domain.tld) ​​hay không nếu sử dụng shared hosting. –

+0

Tôi đang sử dụng tính năng lưu trữ được chia sẻ và miền phụ ký tự đại diện không được hỗ trợ. Tôi có thể nâng cấp tài khoản và kiến ​​nghị của mình để được hỗ trợ ký tự đại diện, nhưng có vẻ như không đáng. Điều này có thể được thực hiện theo cách không sử dụng ký tự đại diện không? Cảm ơn! – Andrew

+0

Nếu bạn sẵn sàng thêm mọi tiêu đề máy chủ vào trang web của bạn (hoặc có cách tự động hóa nó - một lần nữa, hãy kiểm tra một số API từ máy chủ của bạn) - sau đó có, có thể.Trang web của bạn phải trả lời các cuộc gọi của tất cả các địa chỉ đó bằng cách nào đó - ký tự đại diện DNS (hoặc IP được gán cho kịch bản "miền bất kỳ") sẽ là tối ưu. Nếu máy chủ của bạn không cung cấp cho bạn các tùy chọn như vậy, hãy thay đổi nó. –