Почему сервер не доступен через браузер, а через CURL — ок?
Добрый день,
Решил опробовать Laravel Octane, с запуском сервера через Swoole. OS - Ubuntu 20
Запускаю сервер, он начинает принимать запросы по 8000 порту, пробую cURL (localhost) - отвечает нормально. Открываю в браузере - "Не удается отобразить страницу" (connectionfailure).
Сервис отвечает, то значит он там и запущен?) Чем не проверка...
Можно еще нетстатом:
root@37-140-199-175:~# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 32254/swoole_http_s
Да уже не важно.
Вы запускаете curl на удалённой машине и в качестве аргументов передайте localhost:8000, фактически происходит обращение к самому себе.
Чтобы обеспечить доступ извне необходимо либо проксировать запросы снаружи на localhost:8000 с помощью, например, Nginx, либо запустить сервис на 0.0.0.0:8000
Будет совсем эпично если этот сервис запускается на локальной машине, а на удалённом севере вообще ничего нет, но вы настойчиво пытаетесь запустив код у себя получить ответ от сервера.
Александр Карабанов, этот сервис запускается на хостинге, через терминал хостинга, я как раз и делаю курл. А со своего браузера уже пытаюсь достучаться.
Иван Веков, 0.0.0.0:8000 - это, грубо говоря, заставить слушать порт 8000 на всех интерфейсах.
Если так сделать, то к сервису можно будет обращаться, как curl 127.0.0.1:8000, так и curl 37.140.199.175:8000
root@37-140-199-175:~# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 32254/swoole_http_s
Так я и хочу, чтобы порт слушался и через 127.0.0.1 и через 37.140.199.175...
Имя localhost отрезолвится в IP 127.0.0.1 который назначен loopback интерфейсу. Этот интерфейс существует только в воображении ядра операционной системы и траффик с него наружу не уйдёт просто так.
Иван Веков, рекомендую использовать Nginx, но если прям надо запустить, а постигать настройку Nginx нет желания, то можно просто запустить на 0.0.0.0:8000 тогда, доступ снаружи появиться (если порты фаирволом не закрыты)
Ещё раз для закрепления: траффик с loopback интерфейса наружу не уйдёт.
Если надо чтобы сервис был доступен снаружи его надо заставить слушать порт на интерфейсе, который смотрит наружу, либо на всех интерфейсах (0.0.0.0)...