Nếu bạn sử dụng một cái gì đó như node http-proxy hoặc nginx bạn có thể chạy từng trang web riêng biệt trên các cổng địa phương khác nhau và sau đó ánh xạ tên miền. Tôi sử dụng proxy http nhưng những người khác yêu nginx.
Để làm việc đó, bạn sẽ cần phải thêm các mục DNS giải quyết vào địa chỉ IP mà proxy ngược của bạn đang chạy. Sau đó, ví dụ, yêu cầu cổng 80 sẽ được ánh xạ trở lại localhost: 3000.
Điều này cho phép mỗi ứng dụng chạy riêng biệt và trong các quy trình riêng biệt từ các trang web khác. Họ không thể va chạm nhau. Bạn cũng không có vấn đề về không gian tên trong đó cả hai ứng dụng đều yêu cầu cùng một đường dẫn.
app.js của tôi cho proxy http trông như thế này:
var proxyPort = 80;
var http = require('http');
var httpProxy = require('http-proxy');
var options = {
router: {
'localhost': '127.0.0.1:3000',
'somesite.com': '127.0.0.1:3000',
'othersite.com': '127.0.0.1:4000'
}
};
console.log('Proxy Routing:')
console.log(options);var options = {
console.log();
var proxyServer = httpProxy.createServer(options);
proxyServer.listen(proxyPort);
console.log('Proxy listening on port ' + proxyPort);
Bạn cũng có thể lộ trình với các đường dẫn. Thấy điều này: https://github.com/nodejitsu/node-http-proxy/issues/232
Vì vậy, giống như yêu cầu ban đầu của bạn, bạn có thể làm:
router: {
'myhost.com/appA': '127.0.0.1:8080',
'myhost.com/appB': '127.0.0.1:9090/appB',
'myhost.com/appC': '127.0.0.1:9090/appC'
}
};
lựa chọn khác là chỉ đơn giản là cung cấp một con đường/trang cho mỗi khách hàng và sau đó nó chỉ đơn giản là một vấn đề DNS. Bạn sẽ thiết lập DNS sao cho tất cả các tên miền đều giải quyết được một địa chỉ IP mà ứng dụng của bạn chạy. Điều đó có một số nhược điểm:
- domain1.com/user1 và domain2.com/user2 sẽ hoạt động mà bạn có thể không muốn.
- Bạn có kiểm soát được tất cả mã hoặc mã cung cấp không? Nếu đó là mã do người dùng cung cấp thì bạn muốn một số cách ly do đó, do đó các ứng dụng riêng biệt.
- Bạn vẫn có thể cần một proxy http để chạy trên cổng 80 trong linux và không chạy dưới dạng sudo.
Bạn có đang chỉ các mã này ở các phiên bản Node.js khác nhau không? Hoặc tất cả cùng một ứng dụng? – Brad
Những gì bạn đề cập trong ví dụ là khó hiểu: 'mysite.com/trang web của họ 'sẽ không nằm trên một tên miền riêng biệt, nó là một tuyến đường khác. Bạn thường có tên miền như 'domain.com' và tên miền phụ như' mail.domain.com'. Bạn có muốn chuyển hướng các yêu cầu đó hoặc xử lý chúng không? – user568109
@ user568109 Xin lỗi vì sự nhầm lẫn. mysite.com/their-site sẽ là trang của họ trên ứng dụng của tôi. Họ có thể có họ sở hữu tên miền đăng ký ở nơi khác mà tôi muốn các tùy chọn cho họ để bản đồ đến trang của họ trên trang web của tôi. –