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