недоступен доступ к моим Rails, используя публичный IP моего Ubuntu сервера в браузере

Вопрос или проблема

У меня есть сервер Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-63-generic x86_64), и мой публичный IP такой-то 183.xx.xxx.xx (curl -4 icanhazip.com). Я запустил свое приложение на Rails, используя команду:

rails s -b0.0.0.0 -p3002

и сервер Puma успешно запустился

    => Запуск Puma
    => Приложение Rails 5.0.3 запускается в режиме разработки на http://localhost:3002
    => Запустите `rails server -h` для получения дополнительных параметров запуска
    Puma запускается в однопоточном режиме...
    * Версия 3.9.1 (ruby 2.4.0-p0), кодовое имя: Private Caller
    * Минимальное количество потоков: 5, максимальное количество потоков: 5
    * Окружение: разработка
    * Прослушивание на tcp://0.0.0.0:3002
    Используйте Ctrl-C для остановки

Я попытался получить доступ к своему приложению в браузере, используя:

 http://183.xx.xxx.xx:3002

Я получаю

Этот сайт недоступен
172.xx.xxx.xx слишком долго не отвечает.
ERR_CONNECTION_TIMED_OUT    

Любая помощь будет очень ценна. Спасибо заранее!

ИЗМЕНЕНИЕ 1

netstat -plnt

    tcp        0      0 0.0.0.0:45109           0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
    tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -
    tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:3002            0.0.0.0:*               LISTEN      25689/0.0.0.0:3002)
    tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -

Процесс работает с идентификатором 25689

Прежде всего, я бы проверил iptables. Выполнив iptables -L, вы должны увидеть что-то подобное:

ACCEPT     tcp  --  anywhere    anywhere   tcp dpt:3002 ctstate NEW

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

sudo iptables -A INPUT -p tcp --dport 3002 -j ACCEPT

Предполагая, что браузер находится на той же машине, что и сервер, вам лучше использовать следующий URL:

http://127.0.0.1:3002

Доступ к вашему собственному публичному IP обычно проблематичен, так как вы, как правило, полагаетесь на довольно сложный маршрут. 127.0.0.1 — это другое название для localhost и стандартный способ подключения к серверам на той же машине.

Иногда серверы ожидают доступа по доменному имени. Не похоже, что это ваша проблема, но если вы когда-либо решите этот вопрос, просто добавьте следующую строку в файл /etc/hosts:

127.0.0.1 your.public.domain.name

Наконец, на случай, если вас смущает появление 0.0.0.0 в вашей таблице netstat, отметим, что таблица показывает, на каком интерфейсе серверы прослушивают. Некоторые серверы прослушивают все интерфейсы (0.0.0.0), в то время как другие прослушивают только локальный интерфейс (127.0.0.1).

Ответ или решение

Проблема с доступом к вашему Rails-приложению на сервере Ubuntu по публичному IP может быть решена с учетом нескольких ключевых факторов. Давайте подробно рассмотрим каждый из них.

1. Проверка конфигурации сервера

Вы уже успешно запустили ваше Rails-приложение с помощью команды:

rails s -b 0.0.0.0 -p 3002

Это указывает серверу прослушивать все интерфейсы на порту 3002. Однако, для успешного подключения нужно убедиться, что ваш сервер доступен извне.

2. Настройка брандмауэра

Необходимо проверить настройки брандмауэра на вашем сервере. Выполните команду:

sudo iptables -L

Вы должны увидеть правило, похожее на следующее:

ACCEPT     tcp  --  anywhere    anywhere   tcp dpt:3002 ctstate NEW

Если такого правила нет, добавьте его с помощью следующей команды:

sudo iptables -A INPUT -p tcp --dport 3002 -j ACCEPT

Эта команда позволяет входящие соединения на порт 3002.

3. Проверка сетевых настроек

Убедитесь, что ваш публичный IP адрес правильно настроен. Вы можете проверить доступность вашего сервера откуда-то, используя такие инструменты как ping или telnet, чтобы убедиться, что порт 3002 доступен:

telnet 183.xx.xxx.xx 3002

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

4. Проверка настройки NAT/Firewall на маршрутизаторе

Если ваш сервер находится за маршрутизатором или используется NAT, вам нужно убедиться, что порт 3002 также проброшен (порт форвардинг) на маршрутизаторе. Проверьте настройки вашего маршрутизатора и убедитесь, что трафик перенаправляется на внутренний IP вашего сервера.

5. Локальный доступ через localhost

Как вы уже упомянули, попробуйте получить доступ к вашему приложению через localhost:

http://127.0.0.1:3002

Это позволит убедиться, что проблем с приложением на сервере нет, и оно запущено.

6. Изменение файла /etc/hosts

Если вы иногда сталкиваетесь с проблемами при использовании доменных имен, добавьте следующую строку в файл /etc/hosts:

127.0.0.1       your.public.domain.name

Таким образом, браузер может идентифицировать ваше доменное имя, если вы решите настроить его на сервере.

Заключение

Проблема с доступом к вашему Rails-приложению может быть связана с несколькими факторами, включая настройки сетевой безопасности, брандмауэра и маршрутизаторов. Следуя вышеописанным шагам, вы сможете засекретить доскональные причины, по которым ваш сервер может не отвечать на запросы. Если у вас по-прежнему возникают проблемы, рассмотрите возможность проверки логов сервера для получения более детальной информации о возникших ошибках.

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

Оцените материал
Добавить комментарий

Капча загружается...