Подтвердить что ты не робот

Запуск Node.js в apache?

У нас есть веб-сервер Apache, установленный на компьютере, который также обслуживает страницы с использованием Perl.

Для проекта я решил использовать Node.js вместо Perl/Ruby. Просто интересно, можно ли использовать Apache в качестве моего веб-сервера (чтобы он обслуживал страницы) и использовать Node.js для динамического создания веб-страниц (это для создаваемого веб-приложения)?

Иными словами, они могут работать рука об руку, как Apache/Perl или Apache/PHP и т.д.

4b9b3361

Ответ 1

Нет. NodeJS недоступен в качестве модуля Apache в способе mod-perl и mod-php, поэтому невозможно запустить node "поверх Apache. Как указал гексист, можно запустить node как отдельный процесс и организовать связь между ними, но это совсем не так, как вы уже используете в стеке LAMP.

В качестве замены Apache node предлагает преимущества производительности, если у вас много одновременных подключений. Там также огромная экосистема модулей для всего, что вы можете придумать.

Из вашего вопроса неясно, нужно ли динамически генерировать страницы для каждого запроса или периодически генерировать новый контент для кэширования и обслуживания. Если это последнее, вы можете использовать отдельную задачу node для генерации контента в каталог, который будет обслуживать Apache, но опять же, что совершенно отличается от PHP или Perl.

Node - не лучший способ обслуживать статический контент. Nginx и Varnish более эффективны в этом. Они могут обслуживать статический контент, а node обрабатывает динамические данные.

Если вы планируете использовать node для веб-приложения вообще, Express должен быть высоким в вашем списке. Вы можете реализовать веб-приложение исключительно в Node, но Express (и аналогичные фреймворки, такие как Flatiron, Derby и Meteor) предназначены для того, чтобы унести много боли и скуки. Несмотря на то, что документация Express может показаться немного разреженной поначалу, посмотрите на экранные броски, которые все еще доступны здесь: http://expressjs.com/2x/screencasts.html Они вам дадут хорошее представление о том, какие экспресс-предложения и почему это полезно. Репозиторий github для ExpressJS также содержит много хороших примеров для всего, от аутентификации до организации вашего приложения.

Ответ 2

Хостинг узла nodejs через apache может быть организован с помощью прокси-модуля apache.

Лучше запустить nodejs-сервер на localhost с портом по умолчанию 1337

Включить прокси с помощью команды:

sudo a2enmod proxy proxy_http

Не разрешать проксирование с помощью ProxyRequests до тех пор, пока вы не закрепите свой сервер. Открытые прокси-серверы опасны как для вашей сети, так и для Интернета в целом. Установка ProxyRequests в Off не отключает использование директивы ProxyPass.

Настроить/etc/apche2/sites-availables с помощью

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName site.com
    ServerAlias www.site.com 

    ProxyRequests off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location />
        ProxyPass http://localhost:1337/
        ProxyPassReverse http://localhost:1337/
    </Location>
</VirtualHost>

и перезапустите службу apache2.

Ответ 3

Хотя здесь есть много хороших советов, я хотел бы ответить на заданный вами вопрос:

Иными словами, они могут работать рука об руку, как Apache/Perl или Apache/PHP и т.д.

ДА, вы можете запустить Node.js на Apache по стороне Perl и PHP IF, вы запускаете его как модуль CGI. На данный момент я не могу найти mod- node для Apache, но проверьте: CGI- node для Apache здесь http://www.cgi-node.org/.

Интересная часть cgi-node заключается в том, что она использует JavaScript точно так же, как вы бы использовали PHP для создания динамического контента, обслуживания статических страниц, доступа к базе данных SQL и т.д. Вы даже можете совместно использовать основные библиотеки JavaScript между сервером и клиентом/браузером.

Я думаю, что переход на один язык между клиентом и сервером происходит, и JavaScript кажется хорошим кандидатом.

Быстрый пример с сайта cgi- node.org:

<? include('myJavaScriptFile.js'); ?>
<html>
   <body>
      <? var helloWorld = 'Hello World!'; ?>
      <b><?= helloWorld ?><br/>
      <? for( var index = 0; index < 10; index++) write(index + ' '); ?>
   </body>
</html>

Выводится:

Hello World!
0 1 2 3 4 5 6 7 8 9

У вас также есть полный доступ к HTTP-запросу. Это включает в себя формы, загруженные файлы, заголовки и т.д.

В настоящее время я запускаю Node.js через модуль cgi- node на Godaddy.

CGI- node.org имеет всю документацию для начала работы.

Я знаю, что я бредил об этом, но, наконец, облегчить использование чего-то другого, кроме PHP. Кроме того, чтобы иметь возможность кодировать JavaScript как на клиенте, так и на сервере.

Надеюсь, что это поможет.

Ответ 4

Общий способ выполнения ваших действий - запустить их рядом друг с другом и прокси-запросы от apache до node.js на основе домена /url или просто иметь node.js содержимое можно вытащить из порта node.js. Этот более поздний метод очень хорошо работает для того, чтобы на вашем сайте были видны виджеты сокета. IIO.


Если вы все-таки сделаете все свое динамическое создание контента в node, вы можете просто использовать node.js в качестве основного веб-сервера, он отлично справляется с обслуживанием как статических и динамические HTTP-запросы.

Смотрите:

http://expressjs.com/

https://github.com/joyent/node/wiki/modules

Ответ 5

При выполнении собственного эксперимента JS на стороне сервера я закончил использование teajs. Он соответствует common.js, основан на V8 И является единственным проектом, который, как я знаю, предоставляет модуль mod_teajs apache server.

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