Tôi có thể thay thế Apache bằng Node.js không?


151

Tôi có một trang web chạy trên CentOS bằng cách sử dụng các nghi phạm thông thường (Apache, MySQL và PHP). Kể từ thời điểm trang web này ban đầu được ra mắt, nó đã phát triển khá nhiều và bây giờ tôi muốn thực hiện những điều lạ mắt hơn với nó là thông báo thời gian thực. Từ những gì tôi đã đọc, Apache xử lý việc này kém. Tôi tự hỏi nếu tôi có thể thay thế chỉ Apache bằng Node.js (vì vậy thay vì " LAMP ", nó sẽ "LNMP").

Tôi đã thử tìm kiếm trực tuyến một giải pháp, nhưng không tìm thấy giải pháp nào. Nếu tôi diễn giải chính xác những điều tôi đã đọc, có vẻ như hầu hết mọi người đang nói rằng Node.js có thể thay thế cả Apache và PHP cùng nhau. Tuy nhiên, tôi có rất nhiều mã PHP hiện có, vì vậy tôi muốn giữ nó hơn.

Trong trường hợp nó chưa rõ ràng, tôi khá bối rối và có thể sử dụng một số giác ngộ. Cảm ơn rất nhiều!


Máy chủ Ape có thể đáng để xem xét.
TryHarder

Câu trả lời:


86

Nếu bạn chuẩn bị viết lại PHP bằng JavaScript, thì có, Node.js có thể thay thế Apache của bạn.

Nếu bạn đặt một cá thể Apache hoặc NGINX chạy ở chế độ proxy ngược giữa máy chủ và máy khách của bạn, bạn có thể xử lý một số yêu cầu bằng JavaScript trên Node.js và một số yêu cầu trong PHP được lưu trữ trên Apache của bạn, cho đến khi bạn hoàn toàn có thể thay thế tất cả PHP của mình với mã JavaScript. Đây có thể là phương tiện hạnh phúc: các WebSockets của bạn có hoạt động trong Node.js không, công việc trần tục hơn trong Apache + PHP.


1
Tôi đánh giá cao những phản ứng nhanh nhẹn! Là nginx vượt trội hơn nhiều so với Apache? Tôi đã có sẵn tệp .htaccess và sẽ rất tuyệt nếu giữ nó. Ngoài ra, tôi đã đọc được rằng việc yêu cầu chuyển tiếp Apache tới Node.js là vô nghĩa vì sau đó bạn sẽ mất đi những lợi thế của Node.js vì bạn vẫn đang trải qua Apache. Sẽ tốt hơn nếu Node.js lắng nghe trên cổng 80 cho bất cứ điều gì trong thư mục con có tên "nodejs" và sau đó mọi thứ không có trong thư mục con đó có thể được Node.js chuyển đến Apache? Apache có thể nghe trên một số cổng khác như 8000.
Rick

21
@Rick, tôi khá gần để xóa câu trả lời của riêng tôi; Node có thể sử dụngsendfile và có một mô-đun hỗ trợ FastCGI có thể giúp bạn dễ dàng phục vụ PHP của mình thông qua Node. Đối với nginx vs Apache, tôi luôn là một kẻ hút các máy chủ kiểu không đồng bộ trên các máy chủ luồng hoặc đa xử lý :) nhưng tôi đã tìm thấy tài liệu Apache dễ tìm và đọc hơn. Tôi gọi đó là sở thích cá nhân trừ khi bạn cần mở rộng đến những con số đáng kinh ngạc. :)
đăng

3
@Rick Bạn không muốn di chuyển công cụ sản xuất sang Node trước khi hiểu nó là gì và hoạt động như thế nào. Node không phải là một viên thuốc ma thuật để làm cho công cụ nhanh hơn. Mô hình hướng sự kiện / async không phải là mới và có nhiều lý do tại sao nó không được sử dụng cho tất cả mọi thứ. vi.wikipedia.org/wiki/Asynyncous_I/O
yvind Skaar

1
@Rick Thay vì nghĩ rằng bạn nên thay thế những gì bạn có, có lẽ tốt hơn là chạy Node ngoài ra. Đừng nghĩ có bất kỳ lý do nào để vượt qua mọi thứ thông qua nút (?), Nghe có vẻ là một ý tưởng tồi. Chỉ cần chạy nút trên một cổng hoặc máy chủ khác.
yvind Skaar

2
@ Yvind Skaar tôi đồng ý. Ngoài ra, đối với hầu hết các trang web (ví dụ Wordpress), nút cổ chai thực sự là cơ sở dữ liệu chứ không phải truy cập tệp. Và, nếu truy cập tệp là một vấn đề thì bộ đệm luôn là một giải pháp khả thi. Dù sao, đối với hiệu suất thực, PHP-APC là một thủ thuật rẻ tiền chết tiệt.
magallanes

26

Node.js có thể nhanh hơn Apache nhờ kiến ​​trúc có sự kiện / không chặn, nhưng bạn có thể gặp vấn đề khi tìm mô-đun / thư viện thay thế một số chức năng của Apache.

Bản thân Node.js là một khung công tác cấp thấp nhẹ cho phép bạn xây dựng tương đối nhanh các công cụ phía máy chủ và các phần thời gian thực của các ứng dụng web của bạn, nhưng Apache cung cấp các tùy chọn cấu hình rộng hơn và các tính năng định hướng máy chủ web "cổ điển".

Tôi sẽ nói rằng trừ khi bạn muốn thay thế PHP bằng khung ứng dụng web dựa trên node.js như express.js thì bạn nên ở lại với Apache (hoặc suy nghĩ về việc di chuyển sang Nginx nếu bạn gặp vấn đề về hiệu năng).


11

Tôi tin rằng Node.js là tương lai trong việc phục vụ web, nhưng nếu bạn có nhiều mã PHP hiện có, thì Apache / MySQL là lựa chọn tốt nhất của bạn. Apache có thể được cấu hình thành các yêu cầu proxy tới Node.js hoặc Node.js có thể yêu cầu proxy tới Apache, nhưng tôi tin rằng một số hiệu suất bị mất trong cả hai trường hợp, đặc biệt là trong trường hợp đầu tiên. Không phải là một vấn đề lớn nếu bạn không chạy một trang web có lưu lượng truy cập rất cao.

Tôi mới đăng ký stackoverflow và tôi chưa thể nhận xét về câu trả lời được chấp nhận, nhưng hôm nay tôi đã tạo một tập lệnh Node.js đơn giản thực sự sử dụng sendfile () để phục vụ các tệp thông qua giao thức HTTP. (Ví dụ hiện có rằng câu trả lời được chấp nhận liên kết đến chỉ sử dụng giao thức TCP trần để gửi tệp và tôi không thể tìm thấy ví dụ cho HTTP, vì vậy tôi đã tự viết nó.)

Vì vậy, tôi nghĩ rằng ai đó có thể tìm thấy điều này hữu ích. Việc phục vụ các tệp thông qua lệnh gọi hệ điều hành sendfile () không nhất thiết phải nhanh hơn khi dữ liệu được sao chép qua "vùng đất người dùng", nhưng cuối cùng nó sử dụng CPU và RAM ít hơn, do đó có thể xử lý số lượng kết nối lớn hơn so với cách cổ điển.

Liên kết: https://gist.github.com/1350901


2
Mặc dù rất đúng, tôi vẫn tin rằng nếu bạn loại bỏ apache xuống chỉ làm những gì bạn đang mô tả, nó sẽ chạy nhanh và nếu không, nhanh hơn node.js. Apache thực hiện rất nhiều thứ mà mọi người không nhìn thấy hoặc thực sự hiểu và nếu bạn đã thêm tất cả chức năng của các máy chủ web này vào node.js, thì nó sẽ chạy chậm như chúng. Như ví dụ đơn giản có thể là, mynode.js / getfile? File = / etc / Shadow
Rahly

8

Bài viết SO trước đây mô tả chính xác những gì tôi đang nói (nút php + socket.io +)

Tôi nghĩ rằng bạn có thể thiết lập một máy chủ nút trên somehost: 8000 với socket.io và đưa mã máy khách socket.io vào các thẻ và với công việc tối thiểu khiến ứng dụng hiện tại của bạn rung chuyển với socket.io (em bé thời gian thực) mà không cần quá nhiều công việc.

Trong khi nút có thể là máy chủ phụ trợ duy nhất của bạn hãy nhớ rằng nút đó thích sống theo tên của nó và trở thành một nút. Tôi đã kiểm tra một cuộc trò chuyện một lúc trước mà Ryan Dahl đã trao cho nhóm Người dùng PHP và anh ta đã đề cập đến nút tên liên quan đến tầm nhìn của một số quy trình nút đang làm việc và nói chuyện với nhau.


2

LAMP của nó so với MEAN ngày nay. Để so sánh trực tiếp, hãy xem http://tamas.io/what-is-the-mean-stack .

Tất nhiên M, E và A có phần thay đổi. Ví dụ, koa gần đây có thể thay thế (E) xpress.

Tuy nhiên, chỉ cần thay thế Apache bằng Node.js có lẽ không phải là cách phù hợp để hiện đại hóa ngăn xếp web của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.