Настроить apache для псевдонима приложения nodejs?

У меня есть приложение PHP, обслуживаемое через apache на порту 80. У меня есть приложение nodejs, работающее автономно на порту 3000. Я хочу делать запросы ajax из кода на стороне клиента, сгенерированного PHP, в приложение nodejs. Проблема в том, что одна и та же политика происхождения не позволяет использовать другой порт, и я не могу запускать и nodejs, и apache на порту 80.

В идеале я бы хотел, чтобы они оба работали на 80-м порту с точки зрения клиента. Как я могу настроить apache для перенаправления / псевдонима / любых определенных запросов к приложению nodejs?

Надеюсь, это имеет смысл. Примечание: не уверен, возможно ли это, или правильно ли я поступаю - открыт для предложений.


person Finbarr    schedule 25.06.2011    source источник
comment
Узел балансировки нагрузки с apache кажется простым способом создать узкое место. Просто используйте nginx и перенаправьте некоторые из ваших запросов на node.js (в качестве альтернативы перепишите ваше приложение PHP в node \ o /)   -  person Raynos    schedule 25.06.2011
comment
nodejs и nginx   -  person Raynos    schedule 25.06.2011
comment
Да, я думаю, вы оба правы. nginx кажется подходящим вариантом, и он хотел бы переписать приложение в node, но время дорого!   -  person Finbarr    schedule 25.06.2011


Ответы (1)


Вы можете сделать это с помощью обратного проксирования. Добавьте mod_proxy и настройте местоположение под вашим основным доменом в файле vhost для прокси на порт 3000 на localhost. В основном что-то вроде:

<VirtualHost *:80>
 ServerName example.com
 <Location /api>
   ProxyPass /api http://localhost:3000/
   ProxyPassReverse /api http://localhost:3000/
 </Location>
</VirtualHost>
person dvbportal    schedule 25.06.2011
comment
Я выбрал решение Raynos, но это тоже сработало бы, хотя и не так эффективно. - person Finbarr; 26.06.2011
comment
я хотел бы добавить эту blog.ngarua.com/?p=112 конфигурацию в ссылка позволяет apache обслуживать статические файлы, а серверу nodejs обрабатывать фактические запросы приложений. - person memical; 14.04.2012
comment
Я получаю сообщение об ошибке: ProxyPass | ProxyPassMatch не может иметь путь, если он определен в местоположении. При применении вышеуказанного! - person moderns; 10.05.2014
comment
Re: комментарий @moderns, насколько мне известно, у вас не может быть пути для ProxyPass или ProxyPassReverse в блоке Location (это избыточно). Мне удалось просто удалить путь, то есть: ProxyPass http://localhost:3000. - person Synexis; 07.09.2015
comment
Это работает, как и говорит Synexis. Я не добавлял пути внутри блока местоположения, в этом нет необходимости. - person Dan Zuzevich; 23.01.2018
comment
эта конфигурация вызывает ошибку, пожалуйста, исправьте вашу конфигурацию - person cyril; 05.11.2018