Глядя на ваш другой вопрос , который был помечен как дубликат этого, у вас есть некоторая дополнительная информация, которая, вероятно, поможет выяснить, что вам нужно.В частности, вы упоминаете следующее:
Я хочу разместить несколько серверов http с NodeJS, которые все получают и отправляют запросы http.В то же время я хочу, чтобы Apache работал, который занимает порт 80. Если я отключу Apache и позволю NodeJS работать на порту 80, он будет работать, но я не могу запустить их одновременно.
Этот сценарий будет запускаться и получать запросы локально на порту 8081, но я не могу отправить ему запрос AJAX через Интернет, даже после переадресации порта с помощью моего маршрутизатора:
Я думаю, что @ ankit-agarwal, вероятно, прав в том, что вам нужна настройка обратного прокси-сервера для перенаправления трафика в разные бэкэнды.Предполагая, что у вас есть внешний IP-адрес, вы должны иметь доступ к каждому из ваших бэкэндов, используя порты, которые они прослушивают.Например, если открытый публичный IP-адрес вашего компьютера равен 100.120.110.43:
+---------+------+-------------------------------------+
| Backend | Port | Web Address |
+=========+======+=====================================+
| Apache | 80 | 100.120.110.43 or 100.120.110.43:80 |
| Node1 | 8080 | 100.120.110.43:8080 |
| Node2 | 8081 | 100.120.110.43:8081 |
+---------+------+-------------------------------------+
Если вы хотите получить доступ к каждому бэкэнду без указания порта, вам нужно каким-то образом сообщить свой внутреннийсеть, которая обслуживает сервер на основе запроса.Один из способов сделать это - использовать маршрутизацию на основе пути, где вы настраиваете свой обратный прокси-сервер для маршрутизации трафика в разные бэкэнды на основе пути в URL.Вы не опубликовали свою конфигурацию Apache, но вы можете использовать свой текущий сервер Apache для этого, используя директивы ProxyPass и ProxyPassReverse , аналогичные приведенным ниже:
ProxyPass "/node1" "http://100.120.110.43:8080/"
ProxyPassReverse "/node1" "http://100.120.110.43:8080/"
ProxyPass "/node2" "http://100.120.110.43:8081/"
ProxyPassReverse "/node2" "http://100.120.110.43:8081/"
Крутая вещь в использовании обратного прокси-сервера заключается в том, что вам не нужно показывать серверные части вашего узла.Давайте предположим, что вы этого не сделали, и они доступны только из внутренней сети по адресу 0.0.0.0:port.
Listen 80
<VirtualHost *:80>
DocumentRoot /www/apache
ServerName www.apachefrontend.com
ProxyRequests off
ProxyPass /node1 http://0.0.0.0:8080/
ProxyPassReverse /node1 http://0.0.0.0:8080/
ProxyPass /node2 http://0.0.0.0:8081/
ProxyPassReverse /node2 http://0.0.0.0:8081/
</VirtualHost>
Вы также можете указать на разные хосты / ips, к которым есть доступ только у вас.
Наконец, вы также можете использовать VirtualHost и ServerName, если у вас есть разные записи DNS для указания на разные бэкэнды.
Listen 80
<VirtualHost *:80>
DocumentRoot /www/apache
ServerName www.apachefrontend.com
</VirtualHost>
<VirtualHost *:80>
ServerName www.nodebackend1.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName www.nodebackend2.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass / http://0.0.0.0:8081/
ProxyPassReverse / http://0.0.0.0:8081/
</Location>
</VirtualHost>
Чтобы все вышеперечисленное работало, вам необходимо включить mod_proxy
и mod_proxy_http
в apache.
Вероятно, это не самые надежные примеры, и я их не проверял, но они должны продемонстрировать идею.Вы можете узнать больше здесь .