Указывает домен на мое удаленное приложение Node JS?

Я пытаюсь выяснить, как именно развернуть Node JS на моем сервере Ubuntu 10.04 LTS. Я читал много разных блогов и статей, которые объясняют разными способами. Большинство из них кажутся устаревшими или на самом деле не работают.

Кажется, что самое простое решение — использовать что-то вроде Forever? ...или Upstart с Monit или Supervisor. Это правильно?

Одна вещь, которую я до сих пор не понимаю, заключается в том, что без использования чего-то вроде Ngnix, как мне на самом деле получить мое доменное имя (например, example.com), чтобы оно действительно указывало на мое приложение Node JS и его работающий порт?

Большое спасибо за любое руководство. Я не эксперт в этом, поэтому, пожалуйста, извините мою неосведомленность здесь. (я стараюсь изо всех сил! :)

ОБНОВЛЕНИЕ. Причина, по которой я спрашиваю об этом, заключается в том, что на моем сервере работает Ngnix для моих статических проектов/проектов Django. Я хочу использовать тот же сервер для некоторых примеров приложений Node JS, с которыми я возился. Я перешел по ссылке о vhosts и Connect with Node JS, и в какой-то степени это хорошо, но я до сих пор не понимаю, как заставить один из моих доменов фактически указывать на это приложение Node на моем сервере?


person littlejim84    schedule 09.06.2011    source источник
comment
Дубликат http://stackoverflow.com/questions/5262127/single-node-js-http-server-accepting-connections-on-multiple-hostnames Обычный http-сервер NodeJS не может быть привязан к целевому домену, но вы можете использовать Connect промежуточное ПО.   -  person Phillip Kovalev    schedule 09.06.2011
comment
Итак, чтобы указать домен (например, example.com) на мое приложение узла, работающее на моем сервере, мне нужно использовать промежуточное ПО Connect vhost? Я до сих пор не понимаю, как «example.com» узнает, что нужно перейти к приложению узла...   -  person littlejim84    schedule 09.06.2011
comment
Я обновил свой вопрос, чтобы быть более конкретным.   -  person littlejim84    schedule 09.06.2011
comment
@Phillip Kovalev Это совсем другой вопрос.   -  person Casey Chu    schedule 09.06.2011


Ответы (1)


Вам нужно отделить понятие доменного имени от фактического сервера. Имя домена указывает на сервер. Когда браузер (или другой клиент) запрашивает example.com, DNS ищет соответствующий IP-адрес и направляет браузер на сервер с этим IP-адресом.

Затем браузер выбирает, через какой порт отправить запрос, просматривая URL-адрес. Например, запрос example.com:345 выберет порт 345. Если не указать, по умолчанию при использовании HTTP используется порт 80.

Итак, браузер отправил запрос через порт 80. Теперь на вашем сервере есть программа, прослушивающая этот порт. Для вас это будет nginx. Nginx читает запрос («о, вы ищете index.html») и возвращает запрошенное вами содержимое.

В вашем сценарии Node.JS заменяет Nginx. Чтобы Node.JS ответил, он также должен прослушивать порт и отвечать соответствующим образом. Вот где появляется ваш код:

require('http').createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, "127.0.0.1");

Это запускает сервер, прослушивающий порт 1337. На любые запросы, направленные на example.com:1337, это приложение Node.JS будет отвечать «Hello World».

tl;dr: ваше доменное имя уже указывает на ваш сервер. Вы можете получить доступ к своему приложению по адресу example.com:1337, где 1337 — ваш порт.

person Casey Chu    schedule 09.06.2011
comment
Надеюсь, отличный ответ, сейчас мне нужно такое пошаговое руководство, Кейси, спасибо. Я понимаю все, что вы говорите, но кажется, что у меня все еще будет проблема с номером порта в конце URL-адреса. В этом ответе говорится об использовании Node с Ngnix (stackoverflow.com/questions/5009324/node-js-nginx -и-сейчас) ...может не самое лучшее? ... тем не менее, в ответ на ваш ответ мне все еще интересно, как вы могли бы запустить Node на другом порту, но не указывать номер порта в конце URL-адреса? - person littlejim84; 09.06.2011
comment
Ах, это должно быть довольно просто. В конфигурации вашего сервера для nginx (того, который вы используете для своего статического веб-сайта) добавьте пункт location /blah/ { proxy_pass http://localhost:1337; }. По сути, nginx передает запрос с порта 80 на порт 1337. Теперь вы можете получить доступ к своему приложению Node.JS по адресу example.com/blah. - person Casey Chu; 09.06.2011
comment
надеюсь Спасибо. Итак, в моей ситуации, поскольку я все равно запускаю статические сайты и сайты Django (используя gunicorn) на своем сервере ... Использование nginx для прокси-сервера к приложению Node JS - неплохой способ для меня продолжить? Я только начинаю работать с Node JS, и мне просто нужно место для экспериментов и развертывания... Таким образом, использование Ngnix и Node таким образом является для меня хорошим способом сделать это... пока? (еще раз спасибо!) - person littlejim84; 09.06.2011
comment
Это точно не плохой способ! Хотя, если вы просто экспериментируете, маленький номер порта в конце URL-адреса на самом деле не так уж и плох :) - person Casey Chu; 09.06.2011
comment
надеюсь Хороший вопрос. Спасибо, Кейси, ты очень помог! - person littlejim84; 09.06.2011