Я новичок в node.js и пытаюсь понять, как его использовать. Я хорошо знаком с JavaScript, поэтому сам язык не требует пояснений, но использование Node.js сильно отличается от реализации в браузере.

У меня есть собственный удаленный виртуальный сервер, я установил Node и диспетчер пакетов, и все работает как положено. Я не совсем экстраординарный сервер, и у меня ограниченный опыт работы с терминалами и конфигурациями Apache.

Я могу запустить свой сервер, используя:

nodejs index.js

Что дает мне: listening on *:3300 как и ожидалось.

Затем я могу получить доступ к своему локальному хосту из терминала, используя: curl http://localhost:3300/ что дает мне ожидаемый ответ.

Учитывая, что веб-сайт, который ссылается на мой сервер, - https://example.com , я пытаюсь подключиться к этому серверу, используя http://example.com:3300/ но безуспешно, поскольку я просто получаю сообщение ERR_CONNECTION_TIMED_OUT . Я не уверен, как получить к нему доступ.

2 ответа2

0

Доступ к localhost не проблема, так как вы уже прослушиваете * (что означает все интерфейсы). Чтобы любой мог получить доступ к вашему серверу с именем «example.com», он должен разрешить IP-адрес, который достигнет вашего сервера с клиентского компьютера. Что это значит, зависит от вашей среды.

Для тестирования, если вы пытаетесь получить доступ к сайту с того же компьютера, на котором работает node.js (который подходит только для тестирования), я предлагаю добавить адрес обратной связи в системный DNS-кэш имен. /etc /hosts в unix и Windows\system32\drivers\etc\hosts в большинстве окон. Как уже говорилось, это подходит только для тестирования: добавьте строку: 127.0.0.1 example.com в конец файла на отдельной строке.

Для производственного использования, чтобы другие люди могли получить доступ к вашему сайту, вам нужен поставщик DNS (службы доменных имен), чтобы связать ваше имя с вашим общедоступным IP-адресом. Это будет стоить около 10 долларов в год. Вам также нужен общедоступный IP-адрес, который не блокируется испами других людей, и желательно тот, который меняется не очень часто. Это может варьироваться от упрощенного перенаправления (не рекомендуется, если только для ограничений пропускной способности и доступности) до небольших хостинговых приложений (от 25 до 100 долларов в год и выше, в зависимости от пространства и вычислительных потребностей).

Обе эти услуги предлагаются облачными провайдерами, просто ищите услуги облачного хостинга. Популярные провайдеры включают в себя веб-сервисы Go Daddy и Amazon. У меня был лучший опыт с AWS.

Кроме того, выставление nodejs публичному ip, вероятно, не лучшая идея. Кроме того, я предлагаю вам обратиться к некоторому промежуточному программному обеспечению, например apache или nginx, чтобы обернуть ваше приложение во что-то, что слушает традиционные http-запросы.

Редактировать в ответ на комментарий:

В этом случае вы хотите определить частичный путь URL в ваших конфигурациях apache. Это называется обратным прокси-сервером. Это означает, что вы определяете правило, для которого URL / запросы должны перенаправляться (проксироваться) в node.js, и Apache направит их туда за вами. Смотрите Apache Docs здесь и этот вопрос о сбое сервера:

https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html

https://serverfault.com/questions/497856/using-an-apache-virtualhost-to-access-a-node-js-instance-on-the-same-server

Обратите внимание, что документы Apache, как правило, предполагают, что серверное приложение работает на другом сервере, но оно работает для localhost. Вы хотите директивы proxypass и proxypassreverse.

0

Вместо const hostname = '127.0.0.1';

Do: const hostname = '0.0.0.0';

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .