Node.js Сервер работает из подпапки

Так что я довольно опоздал на вечеринку Node.js. Главным образом потому, что никто не пригласил меня... Спасибо. Тем не менее, я начинаю решать это. Я пришел из ASP классического фона, поэтому есть несколько вещей, которые мне еще предстоит понять.

Если кто-то может указать мне правильное направление, это было бы здорово. Заранее спасибо.

Итак, я настраиваю сервер стандартным способом.

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Это дает мне хорошую страницу в http://127.0.0.1:1337/, Прекрасный.

Сайт, на котором я строю, находится на http://newsite.dev/, Можно ли (не смейтесь) настроить сервер узла для запуска из подпапки моего сайта, скажем, http://newsite.dev/api/?

Итак, любые запросы из клиентских скриптов могут быть отправлены на /api/ скорее, чем http://127.0.0.1:1337/,

РЕДАКТИРОВАТЬ: чтобы сделать вещи немного яснее. В настоящее время я использую пользовательский PHP-фреймворк на http://newsite.dev/, но надеюсь бросить это долгосрочное. А пока нужно запускать их параллельно.

РЕДАКТИРОВАТЬ Опять же, чтобы уточнить, я все работаю на моей OS X, поэтому установка Apache (MAMP).

3 ответа

Решение

У вас есть множество вариантов, но ни один из них не позволит вам использовать порт 80 для вашего Node-приложения на том же сервере, что и Apache+PHP без прокси.

Ваши два лучших варианта следующие:

1) настроить новый поддомен - создать новую запись DNS для node.newsite.dev и направить этот поддомен на совершенно другой IP-адрес на другом сервере (хотя технически вы можете настроить два IP-адреса на одном сервере, см. здесь), то узел можно запустить на порту 80 на отдельном сервере

2) запустить Apache на порту 80 в /path/to/apache/publicdir/newsite.dev и запустить узел на порту 1337 в /path/to/node/application/newsite.dev, после чего вы сможете получить доступ к файлам apache на http://newsite.dev/, и ваше приложение узла на http://newsite.dev:1337/

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

РЕДАКТИРОВАТЬ, ЧТОБЫ ОТВЕТИТЬ НА ВАШЕ РЕДАКТИРОВАНИЕ: Если ваша цель - перейти исключительно на Node и в конечном итоге отключить Apache+PHP, тогда лучше всего использовать поддомен. Недостатком является то, что вам придется использовать полностью квалифицированные ссылки везде. Плюс в том, что когда вы чувствуете, что ваше приложение находится в узле, вы можете найти / заменить (#//(www\.)?newsite.dev#, '//apache.newsite.dev') а также (#//node.newsite.dev#, '//newsite.dev')и затем, когда вы полностью отключены от Apache, просто выключите его.

Вы просите создать виртуальный каталог, и да, вы можете настроить Node.js с PHP, но вы должны немного почитать.

Виртуальный каталог - это веб-сайт, который находится в такой папке, как www.yourwebsite / myotherwebsite

Вот как это настроить в Apache.

http://httpd.apache.org/docs/current/vhosts/examples.html

Вот как это настроить в IIS.

http://technet.microsoft.com/en-us/library/cc771804(v=ws.10).aspx

Затем вам нужно будет подключить Node.js к Apache или IIS. Вот еще инструкции.

Linux: Как я могу реализовать виртуальные каталоги с помощью node.js и Express?

Windows: http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx

Только один сервер может прослушивать порт одновременно. Вы не можете иметь Node.js и некоторый другой сервер на том же порту.

Лучше всего установить другое имя хоста для вашего другого сервера.

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

Другие вопросы по тегам