Могу ли я заменить Apache на Node.js?

150

У меня есть сайт, работающий на CentOS с использованием обычных подозреваемых (Apache, MySQL и PHP). С тех пор, как этот сайт был первоначально запущен, он развился совсем немного, и теперь я хотел бы сделать с ним более интересные вещи, а именно уведомления в реальном времени. Из того, что я читал, Apache плохо справляется с этим. Мне интересно, могу ли я заменить Apache на Node.js(поэтому вместо LAMP "это будет" LNMP").

Я пробовал искать в Интернете решение, но не нашел его. Если я правильно интерпретирую то, что я прочитал, кажется, что большинство людей говорят, что Node.js может заменить оба Apache и PHP вместе. Тем не менее, у меня есть много существующего PHP-кода, поэтому я бы предпочел сохранить его.

Если это еще не очевидно, я довольно смущен и могу использовать некоторое просветление. Большое спасибо!

  • 0
    Сервер обезьян, возможно, стоит изучить.
Теги:

5 ответов

82
Лучший ответ

Если вы готовы переписать свой PHP на JavaScript, то да, Node.js может заменить ваш Apache.

Если вы поместите экземпляр Apache или NGINX, работающий в режиме обратного прокси, между вашими серверами и клиентами, вы можете обрабатывать некоторые запросы в JavaScript на Node.js и некоторые запросы в вашем PHP-хосте Apache, пока вы не сможете полностью заменить весь ваш PHP с кодом JavaScript. Это может быть удачной средой: ваши WebSockets работают в Node.js, более обыденная работа в Apache + PHP.

  • 1
    Я ценю быстрый ответ! Nginx значительно превосходит Apache? У меня уже есть файл .htaccess, и было бы неплохо сохранить его. Кроме того, я прочитал, что бессмысленно перенаправлять запросы Apache на Node.js, потому что тогда вы теряете преимущества Node.js, поскольку вы все еще используете Apache. Было бы лучше, чтобы Node.js прослушивал порт 80 для чего-либо в подпапке с именем «nodejs», и тогда все, что не в этой подпапке, могло быть передано в Apache Node.js? Apache может прослушивать другой порт, например, 8000.
  • 21
    @ Рик, я довольно близок к тому, чтобы удалить свой собственный ответ; Node может использовать sendfile , и есть модуль для поддержки FastCGI, который также может облегчить обслуживание вашего PHP через Node. Что касается nginx против Apache, я всегда был сторонником асинхронных серверов на многопоточных или многопроцессорных серверах :), но я обнаружил, что документацию Apache легче найти и прочитать. Я бы назвал это личным предпочтением, если вам не нужно масштабировать до удивительных номеров. :)
Показать ещё 4 комментария
27

Node.js может быть быстрее Apache благодаря архитектуре с событиями/неблокированием, но у вас могут быть проблемы с поиском модулей/библиотек, которые заменяют некоторые из функций Apache.

Node.js - это легкая низкоуровневая структура, которая позволяет относительно быстро создавать серверные компоненты и части вашего веб-приложения в реальном времени, но Apache предлагает гораздо более широкие параметры конфигурации и "классический" веб-сервер ориентированных функций.

Я бы сказал, что если вы не захотите заменить PHP на фреймворк веб-приложений node.js, например express.js, тогда вы должны остаться с Apache (или подумать о переходе на Nginx, если у вас проблемы с производительностью).

  • 0
    Спасибо за информацию! Это, безусловно, помогает.
11

Я верю, что Node.js - это будущее в веб-сервисе, но если у вас много существующего PHP-кода, лучшим вариантом будет Apache/MySQL. Apache может быть настроен на запросы прокси на Node.js или Node.js может прокси-запросы к Apache, но я считаю, что некоторые показатели теряются в обоих случаях, особенно в первом. Не очень важно, если вы не используете сайт с очень высоким трафиком.

Я только что зарегистрировался в stackoverflow, и пока не могу прокомментировать принятый ответ, но сегодня я создал простой Node.js script, который фактически использует sendfile() для обслуживания файлов по протоколу HTTP. (Существующий пример того, что принятые ответные ссылки используют только протокол протокола TCP для отправки файла, и я не смог найти пример для HTTP, поэтому сам написал его.)

Поэтому я думал, что кто-то может найти это полезным. Обслуживать файлы с помощью вызова sendfile() не обязательно быстрее, чем при копировании данных через "пользовательскую землю", но в конечном итоге он использует меньше процессор и оперативную память, что позволяет обрабатывать большее количество соединений, чем классический способ.

Ссылка: https://gist.github.com/1350901

  • 2
    Хотя это и правда, я все еще верю, что если вы утащили apache и сделаете именно то, что вы описываете, он будет работать так же быстро, а если нет, быстрее, чем node.js. Apache делает много вещей, которые люди не видят или на самом деле не понимают, и если вы добавите все функции этих веб-серверов в node.js, он будет работать так же медленно, как и они. Как простой пример, вероятно, mynode.js / getfile? File = / etc / shadow
7

Предыдущий Сообщение SO, описывающее, что именно говорит (php + socket.io + node)

Я думаю, вы могли бы поставить сервер node на somehost: 8000 с помощью socket.io и пощекотать код клиента socket.io в тегах и с минимальной работой, чтобы ваше существующее приложение качалось с socket.io(realtime baby) без тонны работы.

Хотя node может быть вашим единственным серверным сервером, помните, что node любит соответствовать названию и становится node. Некоторое время назад я проверил разговор, который Райан Дал дал группе PHP Users, и он упомянул имя node, связанное с видением нескольких процессов node, выполняющих работу и разговаривающих друг с другом.

  • 0
    Спасибо за информацию! Я посмотрю на это.
2

Его LAMP по сравнению с MEAN в настоящее время. Для прямого сравнения см. http://tamas.io/what-is-the-mean-stack.

Конечно, M, E и A несколько изменчивы. Например, более поздняя koa может заменить (E) xpress.

Однако просто замена Apache Node.js, вероятно, не является правильным способом модернизации вашего веб-стека.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню