node.js — Apache, PHP, Nodejs, работающие на Fedora, с маршрутизацией на php и nodejs в зависимости от выбранного домена

Я использую дроплет Digital Ocean (возможно, это может быть полезной информацией для решения моей проблемы).

Мой конфиг это:

Все вышеперечисленные приложения находятся в состоянии по умолчанию «после установки».

В настоящее время PHP работает на порте 80, nodejs работает на порте 3000. Поэтому мне нужно набрать:

  • mydomain.com для php
  • mydomain.com:3000 для nodejs

То, что я хотел бы сделать, это:

если я войду someDomainForPhp.com/ Я захожу в php местоположение по умолчанию, которое /var/www/html/

если я войду otherDomainforNode.com/ Я иду в узел по умолчанию, который является /root/

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

Я следил за многими руководствами в Интернете, описывающими, как это сделать, но я думаю, что они предназначены для людей, которые имеют некоторые базовые знания по этому вопросу. Я чрезвычайно нов и «зелен» к этому, и я борюсь с этим.

Если кто-то готов помочь, я мог бы использовать следующую информацию:

  • какие файлы редактировать
  • где они
  • как их редактировать
  • если какие-либо дополнительные модули должны быть установлены, как они называются

РЕДАКТИРОВАТЬ 03.08.2015

Я погуглил и попробовал следующий способ:

<VirtualHost 109.74.199.47:80> # server ip address or *
ServerAdmin [email protected] # any email address
ServerName thatextramile.be # domain name
ServerAlias www.thatextramile.be # any domain alias

ProxyRequests off

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

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

Я положил это в этот файл /etc/httpd/conf/httpd.confв самом низу. Многие люди сообщили, что этот метод работал для них, однако, если я попробовал это, я получил 503 error при доступе к домену. Так что я погуглил эту ошибку 503 и обнаружил, что у какого-то парня была похожая проблема, и он утверждал, что заставил ее работать, модифицировав Location теги следующим образом:

<Location /path/of/my/project> # for me it would be /root/
ProxyPass http://localhost:3000/
ProxyPassReverse http://localhost:3000/
</Location>

Когда я попробовал это, сервер действовал так, как будто не было никакой директивы виртуального хоста, при доступе к домену, который мне обслуживался с моим обычным /var/www/html/index.php файл из apache, без прокси, без изменения порта.

Я также читал, что localhost это плохой путь, он должен быть 127.0.0.1Однако это ничего не меняет.

Я не изменил никакой конфигурации по умолчанию, я только добавил директиву virtualhost в httpd conf. Я также уверен, что все необходимые модули, такие как мод-прокси, включены, я искал документацию по fedora 20 и проверил состояние сервера, они по умолчанию включены и включены. Это действительно кажется странным, что для некоторых людей достаточно просто добавить вышеуказанные строки. У меня ничего не получалось, я либо сталкиваюсь с ошибкой 503 и не знаю, как это исправить, либо не имею прокси-сервера вообще. Я надеюсь, что кто-нибудь придет и поможет начинающему разработчику в беде;)


РЕДАКТИРОВАТЬ 04.08.2015

Я проводил исследования и обнаружил, что у некоторых людей возникают проблемы, связанные с chmod Настройки размещены в каталогах, которые являются корневыми каталогами для php и nodejs. Это не показалось мне очень логичным, но я все равно попробовал, я изменил (для целей тестирования) chmods, чтобы «разрешить все» конфигурации для всех каталогов, связанных с обоими приложениями. Это не помогло вообще.

Я также читал блог, где кто-то утверждал, что проблема может заключаться в том, что я включаю только прокси-маршрутизацию на порт 3000, и я не создал правило для отображения обычного php. Учебник показал, что помимо правила, созданного для nodejs, оно также должно содержать следующее:

<VirtualHost 109.74.199.47:80> # server ip address or *
ServerAdmin [email protected] # any email address
ServerName thatextramile.be # domain name
ServerAlias www.thatextramile.be # any domain alias
DocumentRoot /var/www/html/
</VirtualHost>

Итак, первое правило для маршрутизации на порт 3000 для nodejs, а это работает для php. Проблема в том, что когда я реализовал это правило, у меня был бесконечный цикл, и сервер никогда не загружался. Так что у меня ошибка 503, когда я вхожу в домен, подготовленный для nodejs, и у меня ошибка 502, когда я пытаюсь получить доступ к домену для php.

После прочтения я думаю, что могу указать, где может быть проблема, но все же я мог бы использовать помощь относительно точного решения.

  • Это может быть порт блокировки брандмауэра Linux, отличный от 80 (в данном случае 3000), и, возможно, после добавления исключения в брандмауэр проблема будет решена.
  • может быть, что мой скрипт nodejs server.js неисправен

Это файл server.js для тестирования. Он запускается бесконечно с использованием модуля node forever:

var express = require('express');
var app = express();

app.get('/', function (req, res) {
res.send('Hello World!');
});

var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;

console.log('Example app listening at http://%s:%s', host, port);
});

2

Решение

Первые несколько слов объяснения:

  1. Перед объявлением <VirtualHost> директива, которую вы должны добавить NameVirtualHost *, Вместо * Вы можете точно определить, на какой домен / IP вы ссылаетесь. * Конечно, будет работать, но он считается менее безопасным и медленным.

  2. Чтобы разрешить передачу прокси — вам нужно определить директиву <Proxy> и единственная проблема с вашим определением Allow from all, Этот синтаксис для Apache 2.2, вы используете Apache 2.4, так что в соответствии с перечитывание документов это следует использовать вместо Require all granted,

  3. <Location> теги в вашем случае должны быть такими же, как в начале, только с одной косой чертой <Location />, Причина в том, что вы not получая доступ к вашему приложению через дополнительное пространство имен, вы получаете доступ к нему, вводя прямое доменное имя.

  4. Если вы хотите получить доступ к файлам php через порт 80 с phpdomain.com и сервер node.js на порт 3000 с nodejsdomain.comтогда вы должны not создать 2 виртуальных хоста. Вы создаете только один, в случае если вы вводите nodejsdomain.com откроет порт 3000. Вам понадобятся вторые и более виртуальные хосты, только если вы будете использовать больше серверов node.js или других платформ. Из-за того, что вы его создали, вы оказались в бесконечном цикле.

main причина, по которой ваш прокси не работает, из-за порта 3000, который по умолчанию заблокирован на SELinux, Итак, сначала запустите эту команду semanage port -a -t http_port_t -p tcp 3000, (если вы не вошли как root-тип sudo перед синтаксисом выше).

и затем используйте директиву виртуального хоста:

NameVirtualHost *
<VirtualHost *:80>
ServerName nodejsdomain.com

ProxyRequests off

<Proxy *>
Require all granted
</Proxy>

<Location />
ProxyPass http://localhost:3000/
ProxyPassReverse http://localhost:3000/
</Location>

</VirtualHost>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]