Сервер отвечает на запрос, но нет процесса, слушающего на этом порту.

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

Я озадачен следующей ситуацией. Мой VPS на Ubuntu 24.04 отвечает на curl http://localhost:80 сообщением «404 страница не найдена», но никакой процесс не слушает на порту 80 (sudo lsof -i :80), поэтому я ожидал, что curl сообщит о сбое подключения.

Я не помню точный порядок событий, но всё работало нормально, контейнеризированный сервер nginx слушал на порту 80. Я не помню, почему перезагрузил сервер — из-за проблемы с SSL-сертификатами или потому что установил пакеты — но после перезагрузки (возможно, до) началась эта странность.

После перезагрузки ранее неактивный сервер Caddy (который, как я думаю, я установил для теста некоторое время назад) занял порт 80.

Я убил процесс и удалил Caddy с хост-машины с помощью sudo apt remove caddy. На системе больше нет бинарного файла Caddy. sudo systemctl status caddy.service показывает, что служба «неактивна (умерла)».

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

Теперь, когда я запускаю контейнеризированный сервер Caddy, я могу связать его с 0.0.0.0:80/443 и lsof показывает процесс как слушающий. Так что система, похоже, не считает, что порт 80 используется.

Однако, независимо от того, запущен ли новый контейнер Caddy или нет и независимо от того, возвращает ли lsof процесс, слушающий на порту 80 (и fuser/netstat/…), curl localhost возвращает «404 страница не найдена» (аналогично telnet).

Я не понимаю сетевого взаимодействия в Linux и действительно не понимаю, что происходит. Буду признателен за любые подсказки. Заранее спасибо!

EDIT

Я поэкспериментировал.

  1. curl localhost:80 без sudo lsof -i :80, не показывающего ничего; возвращает «404 страница не найдена»

  2. curl <публичный ip по ip -4 addr>:80 без lsof, не показывающего ничего; возвращает «404 страница не найдена»

  3. curl localhost:80 с сервером nginx, обслуживающим тестовую страницу на порту 80 (docker run -p 80:80 -v $PWD:/usr/share/nginx/html:ro nginx:latest); возвращает тестовую страницу

  4. curl 127.0.0.1:80 с тестовым сервером nginx; возвращает «404 страница не найдена»

  5. curl <публичный ip>:80 с сервером nginx, обслуживающим тестовую страницу на порту 80 (docker run -p 80:80 ...); возвращает «404 страница не найдена»

  6. curl localhost:3000 без lsof, не показывающего ничего; возвращает «Не удалось подключиться к серверу»

  7. curl localhost:3000 с сервером nginx, обслуживающим тестовую страницу на порту 3000 (docker run -p 3000:80 ...); возвращает тестовую страницу

  8. curl <публичный ip>:3000 с сервером nginx, обслуживающим тестовую страницу на порту 3000 (docker run -p 3000:80 ...); возвращает тестовую страницу

Результаты тестов 3, 6, 7, 8 ожидаемы, в то время как 1, 2, 4 и 5 не имеют для меня смысла. Обратите внимание, что тест 3 предполагает, что то, что я говорил ранее о том, что сервер не может обслуживать запросы на localhost:80, не совсем верно (возможно, я не уделил этому достаточного внимания). Основная проблема остается без изменений, что-то отвечает, хотя lsof не показывает ничего. Кроме того, наблюдается действительно странное поведение, которое я не могу объяснить (см., например, пункты 3 и 4). Могла ли проблема быть на стороне провайдера хостинга?

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

Анализ проблемы: Сервер отвечает на запросы, но процесс не слушает на этом порту

Введение

Ваша ситуация на Ubuntu 24.04 VPS, когда запросы к локальному серверу на порту 80 возвращают "404 page not found", несмотря на отсутствие слушающего процесса на этом порту, действительно вызывает недоумение. Давайте подробно проанализируем данную проблему, выделяя возможные причины и рекомендации по их устранению.

Описание ситуации

Согласно предоставленной информации, вы наблюдаете следующие ключевые моменты:

  1. Сервер отвечает на запросы к http://localhost:80, но при этом нет процесса, который бы слушал на этом порту.
  2. После перезагрузки машина испытывает проблемы с сервером Caddy, который, по всей видимости, некорректно освободил порт 80 после удаления.
  3. Docker-изображения, связанные с Caddy и Nginx, корректно работают на других портах, что подтверждено успешными запросами.

Возможные причины проблемы

  1. Кэширование или прокси-сервер: Возможно, на вашем хостинг-провайдере или на уровне сетевого оборудования используется прокси-сервер, который может кэшировать старые ответы или перенаправлять запросы. Это объясняет, почему вы получаете "404 page not found", несмотря на то, что на вашем сервере не запущены процессы.

  2. Сетевые настройки и iptables: Проверьте настройки брандмауэра (iptables) на вашем сервере, который может перехватывать пакеты и перенаправлять их к другому сервису. Используйте команду sudo iptables -L -n -v для проверки.

  3. Отложенные процессы: В редких случаях, после удаления процесса, на системе могут сохраняться «завершающиеся» процессы, которые продолжают обрабатывать запросы на уровне сети, даже если сам процесс уже не существует. Это можно проверить с помощью sudo netstat -tulnp или sudo ss -tulnp.

  4. DNS или конфигурация сетевых интерфейсов: Убедитесь, что конфигурация сети на сервере верная, а также проверьте, не кэширует ли DNS-резолвер старые записи.

Рекомендации по устранению проблемы

  1. Перезагрузка сетевых интерфейсов: Попробуйте перезагрузить сетевые интерфейсы с помощью команды sudo systemctl restart networking.

  2. Проверка конфигураций: Убедитесь, что конфигурации веб-серверов (например, Nginx или Caddy) на самом деле не запускаются автоматически при загрузке.

  3. Логи: Проверьте логи системного журнала (/var/log/syslog или /var/log/messages) и логи веб-сервера на наличие ошибок, которые могут указать на проблему со службой.

  4. Тестирование на новом порту: Чтобы убедиться, что текущие конфигурации работают правильно, протестируйте запустить другой экземпляр Nginx на тестовом порту, таком как 8080. Это даст возможность Исследовать поведение сервера вне порта 80.

  5. Контакт с хостинг-провайдером: Если ни одна из вышеупомянутых рекомендаций не помогает, стоит обратиться в службу поддержки вашего провайдера. Возможно, на их стороне есть дополнительные механизмы, которые могут влиять на поведение вашего сервера.

Заключение

Ваша проблема с неожиданным ответом сервера, когда никакого процесса на порту 80 не запущено, может быть вызвана несколькими причинами, начиная от проблем с конфигурацией и заканчивая сетевыми вопросами. Изучите предлагаемые рекомендации для устранения ситуации, а также не забудьте задействовать поддержку вашего хостинг-провайдера, если проблема будет сохраняться. Будьте внимательны при выполнении этих действий, чтобы избежать потенциальных перебоев в работе вашего сервера.

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

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