2012-04-18 37 views
10

Mục tiêu cuối cùng của tôi là làm cho node.js hiệu quả hơn về chi phí cho mỗi cá thể máy chủ.Làm thế nào để làm cho Node.js Nhiều người thuê nhà cho các trang web trên cổng 80?

Tôi không chạy trò chơi hoặc phòng trò chuyện mà là các trang web khá đơn giản dành cho khách hàng. Tôi muốn nhà nhiều khách hàng trên một máy chủ duy nhất nhưng có nhiều trang web chạy khỏi cổng 80 bằng cách sử dụng ánh xạ tiêu đề máy chủ. Tôi vẫn muốn sử dụng thể hiện như tôi đang làm nhưng có nó giống như một điều định tuyến từ cổng 80 cho các ứng dụng nút khác nếu đó là thậm chí có thể. Nút có thể rẻ hơn nếu nó được thực hiện theo cách này nhưng hiện tại nó đắt hơn cho mục đích của tôi vì mỗi khách hàng sẽ cần hộp riêng của họ nếu chạy trên cổng 80. Ngoài ra, động lực của tôi là tập trung vào phát triển nút nhưng phải có lý do để làm vì vậy về chi phí.

Tôi làm điều này khá nhiều cho ASP.NET trong Windows khi IIS hỗ trợ tính năng này và tôi biết đây cũng là điều bình thường đối với Apache.

Hãy thoải mái chuyển điều này sang một diễn đàn khác trong trao đổi chồng nếu đây không phải là câu hỏi phù hợp hoặc đưa ra những lời chỉ trích mang tính xây dựng hơn là một lời bình luận ngẫu nhiên. Cảm ơn.

cập nhật

Cách tiếp cận tôi mất là sử dụng lưu trữ tĩnh (thông qua gatspy và s3) sau đó một API thay vào đó lĩnh vực đã đăng ký qua đường bưu nhắn từ các phím client và API từ máy chủ và tạo ra các trang web tĩnh theo định kỳ như các trang web thay đổi nhưng cảm ơn cho tất cả các đề xuất!

+1

Từ câu hỏi của bạn có vẻ như bạn đã biết câu trả lời cơ bản - sử dụng 'req.headers.host' để quyết định giữa các chuỗi định tuyến khác nhau cho các máy chủ khác nhau - vậy bạn có yêu cầu một cách tích hợp để làm điều đó không? Hoặc một thư viện để tóm tắt các chi tiết? – jimw

+0

được xây dựng trong sẽ là thích hợp hơn, nút là tuyệt vời trong đó bạn có thể cuộn của riêng bạn nhưng tôi muốn một cái gì đó tích cực đang được xây dựng trong quyền riêng của mình –

+1

Có [this] (https://github.com/coolaj86/connect-vhoster), nhưng nó không phải là một dự án rất tích cực. Nếu không [node-http-proxy] (https://github.com/nodejitsu/node-http-proxy), hoạt động nhiều hơn nhưng có lẽ nhiều hơn bạn cần. – jimw

Trả lời

25

Về lý thuyết, bạn có thể xây dựng một máy chủ web thuần túy mô phỏng chức năng của Apache/Lighttpd/Nginx, nhưng tôi không khuyên bạn nên sử dụng nó. Trong thực tế, đối với các dịch vụ sản xuất nghiêm túc, tôi khuyên bạn nên LUÔN LUÔN trước dịch vụ của bạn với Nginx hoặc một dịch vụ tương đương (xem thisthis).

Dưới đây là làm thế nào một Nginx cấu hình đơn giản sẽ làm việc cho hai subservices tiếp xúc trên cổng 80.

worker_processes 4; 

events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type text/html; 

    server { 
    listen 80; 
    server_name service1.mydomain.com 
    location/{ 
     proxy_pass   http://127.0.0.1:3000/; 
    } 
    } 
    server { 
    listen 80; 
    server_name service2.mydomain.com 
    location/{ 
     proxy_pass   http://127.0.0.1:3001/; 
    } 
    } 
} 

Tôi đã nhìn thấy sản xuất hoảng loạn hộp hạt nhân vì Node không tải van tiết lưu theo mặc định và được ưu tiên tiếp nhận các kết nối mới hơn xử lý các yêu cầu hiện có - được cấp, nó "không nên" đã bị hỏng hạt nhân, nhưng nó đã làm. Ngoài ra, bằng cách chạy trên cổng 3000, bạn có thể chạy dịch vụ Node của bạn dưới dạng không phải root với rất ít quyền (và vẫn proxy nó để nó xuất hiện trên cổng 80). Bạn cũng có thể truyền tải giữa nhiều công nhân, phục vụ các số liệu thống kê, yêu cầu nhật ký, các url viết lại, v.v. v.v. Nginx rất nhanh (nhẹ hơn nhiều so với Apache). Chi phí của việc chuyển tiếp proxy cùng một hộp là tối thiểu và mua cho bạn rất nhiều chức năng và mạnh mẽ mà nó là một dunk slam trong cuốn sách của tôi. Ngay cả những thứ nhỏ nhặt, giống như - khi tôi gặp sự cố hoặc quá tải dịch vụ nút của tôi, người dùng có bị lỗ đen hay không, "tha thứ cho bụi của chúng tôi, máy chủ của chúng tôi đang được duy trì" giật gân.

+1

Tôi cũng thấy câu trả lời này. http://stackoverflow.com/questions/5009324/node-js-nginx-and-now Tôi sẽ kiểm tra xem bạn có đồng ý không vì tôi đồng ý đây là cách tiếp cận tốt nhất mà tôi từng thấy. Cảm ơn. –

+0

Cũng giống như một câu hỏi: Đây không phải là thực sự đa nhiệm vì có nhiều hơn một phần mềm đang chạy nhưng đó là về việc có một số trang web sử dụng cùng một cổng trên một máy chủ phải không? – IroNEDR

5

Điều gì về việc sử dụng proxy ngược thích hợp, như HAProxy, hãy proxy trên cổng 80 và ủy quyền cho nhiều phiên bản nút trên cổng công khai (ví dụ: 10000, 10001 v.v.), dựa trên tiêu đề.host?

+0

có ý nghĩa –

+0

Vấn đề chính với điều này là tôi sẽ không có quyền truy cập ở cấp độ này để HAProxy hoạt động. Tôi đang tìm một giải pháp Node.js trực tiếp nhưng điều này rất hữu ích cho chắc chắn. Tôi đặt điều này trong tâm trí của tôi cho những ý tưởng trong tương lai. –

+3

Cá nhân tôi sẽ không tin tưởng một giải pháp chỉ có nút - đặc biệt là kể từ khi bạn đang nói về các trang web khách hàng khác nhau. Nút là đơn luồng - có nghĩa là các trang web sẽ dễ dàng can thiệp vào hiệu suất của nhau và/hoặc lấy nhau khi chúng chết (nếu tất cả chúng đều chạy trong cùng một cá thể). Bạn hiện đang triển khai nút như thế nào? – UpTheCreek

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