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 и некоторый другой сервер на том же порту.
Лучше всего установить другое имя хоста для вашего другого сервера.
Если вы не можете этого сделать, стандартным способом является передача прокси-запросов с одного сервера на другой. Это относительно легко сделать, но вы не указали, на каком сервере вы работаете, поэтому невозможно быть более конкретным.