Làm cách nào để cho phép khách hàng truy cập SaaS bằng tên tổ chức của họ trong miền? Ví dụ: một ứng dụng web, example.com, có thể có 2 khách hàng là OrgA và OrbB.Cách tạo tên miền phụ kiểu khách hàng/khách hàng bằng cách sử dụng Node và Express
Sau khi đăng nhập, mỗi khách hàng được chuyển hướng đến trang web của họ, orga.example.com/orgb.example.com.
Khi yêu cầu bao gồm tên miền phụ đến máy chủ nút, hy vọng của tôi là xử lý yêu cầu bằng một tuyến '/'. Bên trong trình xử lý tuyến đường, nó chỉ đơn giản là kiểm tra tiêu đề máy chủ và xử lý tên miền phụ dưới dạng tham số cho tổ chức. Một cái gì đó như:
app.get "/*", app.restricted, (req, res) ->
console.log "/* hit with #{req.url} from #{req.headers.host}"
domains = req.headers.host.split "."
if domains
org = domains[0]
console.log org
# TODO. do something with the org name (e.g. load specific org preferences)
res.render "app/index", { layout: "app/app" }
NB. Mục đầu tiên trong mảng tên miền là tên tổ chức. Tôi giả định rằng không có cổng nào xuất hiện trong tiêu đề máy chủ và, hiện tại, tôi không xem xét cách xử lý tên miền phụ không tổ chức (ví dụ: www, blog, v.v.).
Câu hỏi do đó tôi có nhiều hơn về cách nút/Express có thể được định cấu hình để xử lý các yêu cầu với các tiêu đề máy chủ khác nhau. Điều này thường được giải quyết trong Apache bằng cách sử dụng một bí danh ký tự đại diện hoặc trong IIS bằng cách sử dụng một tiêu đề máy chủ.
Một Apache/Rails ví dụ là @http://37signals.com/svn/posts/1512-how-to-do-basecamp-style-subdomains-in-rails
Làm thế nào cùng có thể đạt được trong nút?
Bạn có thể viết một middleware mà nhìn vào các tiêu đề sở tại, được bất kỳ dữ liệu nó cần cho máy chủ cụ thể đó và thêm vào đối tượng req để sử dụng trong các tuyến đường/phần mềm trung gian. –
Tôi nghĩ rằng bit là những gì tôi đã có (mặc dù chưa được chuyển đến middleware). Tôi bị chặn/không rõ ràng về cách thiết lập máy chủ để bắt * .example.com. Tôi nghĩ rằng một proxy có thể được yêu cầu (https://github.com/nodejitsu/node-http-proxy) nhưng tôi cần phải tìm hiểu thêm trước khi tôi cố gắng hiểu nó. Tôi cũng cần giải pháp để tôi phát triển cục bộ (trên OSX). – mattgi