2011-04-09 31 views
15

Tác phẩm của tôi chạy một vài ứng dụng web nội bộ khác nhau trên máy chủ ubuntu (10.10) chạy apache. Tôi hiện đang phát triển một ứng dụng web khác và đang xem xét nghiêm túc việc phát triển trên máy chủ web node.js được tạo tùy chỉnh. Lý luận của tôi về việc muốn làm điều này là:Gửi tên miền phụ đến node.js

  1. Speed ​​/ Khả năng mở rộng
  2. An ninh - Trang sẽ được phục vụ với một công tắc ... trường hợp, thay vì chỉ phục vụ (có khả năng độc hại) sử dụng bất cứ điều gì họ yêu cầu.
  3. Dễ thiết lập - ý định của tôi là cho dự án này là một dự án mã nguồn mở và node.js dễ dàng hơn nhiều cho người dùng để thiết lập, thay vì xử lý apache/IIS/v.v.

Câu hỏi của tôi là, trên máy chủ mà tôi có apache nghe cổng 80, làm cách nào tôi có thể chuyển một miền phụ nhất định sang node.js. Tôi đã nhìn thấy một vài bài viết về cách sử dụng máy chủ ảo apache để vượt qua nó, nhưng điều đó dường như đánh bại mục đích của việc sử dụng node.js. Nếu tôi phải đi qua apache, sau đó cả ba lý do của tôi để tránh apache/IIS đã voided mình.

Tôi biết tôi có thể sử dụng một cổng khác ((8080?), Nhưng từ quan điểm người dùng cuối, nó khá khó hiểu khi đặt trong các cổng tùy chỉnh. Bất kỳ ý tưởng thay thế nào?

Cảm ơn

Trả lời

5

Làm thế nào để làm việc theo cách khác vòng: liên kết nút đến cổng 80, xử lý lưu lượng truy cập được nhắm mục tiêu tại tên miền phụ và sử dụng nó làm proxy ngược lại apache cho mọi thứ khác?

+0

Bất kỳ tốt Node.js modules/mở rộng hoặc hướng dẫn mà bạn biết cho điều này? Hoặc ít nhất một từ khóa tốt để tìm kiếm? – jwegner

+0

[Node http proxy] (https://github.com/nodejitsu/node-http-proxy) nên thực hiện thủ thuật. – Adrien

4

Hãy để tôi bắt đầu từ mặt đất lên:

Bạn có một DNS. Và một máy chủ dns ánh xạ một DNS tới một IP!

Sau đó, bạn có apache chạy trên máy tính để nghe các kết nối trên port 80 cho http:// và trên cổng 443 cho https://. http://example/ thực sự là một yêu cầu trên http://example:80/.

Bạn không thể sử dụng node.js để nghe trên cùng một máy trên cùng một cổng như apache. Đó là lý do tại sao sử dụng cổng 8080 là khả thi.

Bạn cũng có thể ánh xạ tên miền phụ tới một IP khác. Chỉ báo trước ở đây là bạn cần có một địa chỉ IP công cộng.

4

Bạn không thể phục vụ cổng 80 từ cả Apache và node.js. Có Apache như là một reverse proxy sẽ không được nhiều hiệu quả và đó là lý do tại sao nginx là phổ biến trong kịch bản này. Thay thế khác so với nginx dựa reverse proxy có thể được như Khez đề nghị ánh xạ tên miền phụ của bạn đến địa chỉ IP khác nhau mà sẽ node.js chương trình listen hoặc có thể sử dụng node.js chính nó như là một proxy ngược cho Apache.

1

Bạn có thể định cấu hình máy chủ ảo trong apache cho trang web mới của mình và thêm chuyển hướng vĩnh viễn bên trong nó vào máy chủ cục bộ và cổng được sử dụng bởi node.js.

Đây là cách tôi thực hiện trên máy chủ với một số máy chủ ảo khác và nút của tôi.js ứng dụng đang chạy trên cổng 3000:

NameVirtualHost *: (. *) 80

[máy ảo khác bỏ qua cho ngắn gọn]

...

ServerName mynewsite.com RedirectMatch http://localhost:3000 $ 1

+1

Tôi biết đây là một năm cũ ... Điều này thực sự làm việc? Tôi nhận thấy câu trả lời này có 0 upvotes, và tất cả các bài viết khác nói rằng những gì OP được yêu cầu là không thể. –

2

nếu socket.io nút đang chạy, hãy chắc chắn để cho phép cũng vài mods apache:

  1. a2enmod Proxy
  2. proxy_balancer a2enmod
  3. a2enmod proxy_express
  4. a2enmod proxy_http

trong tệp /etc/apache2/sites-available/chat.example.com.conf


<VirtualHost *:80> 
    ServerName chat.example.com 

    <Location "/"> 
     ProxyPreserveHost On 
     ProxyPass http://localhost:3000/ 
     ProxyPassReverse http://localhost:3000/ 
    </Location> 
</VirtualHost> 

thì tất nhiên service apache2 reload

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