Localhost и http-сервер: как запустить локальный сайт на 127.0.0.1 — инструкция для новичка
Localhost — это ваш собственный компьютер, а http://localhost открывает сайт или приложение, которое работает локально, без интернета и хостинга. В статье разберём, как запустить HTTP-сервер на localhost одной командой, какой порт выбрать, почему браузер пишет «отказано в подключении» и когда локального сервера уже мало — пригодится VPS с белым IP. Другие материалы о серверах и сетях читайте в разделе «Блог».

Коротко
Главные выводы статьи о теме «HTTP localhost» в шести пунктах:
- 127.0.0.1 — зарезервированный IP-адрес localhost во всех операционных системах
- python -m http.server поднимает сервер за 1 команду без установки пакетов
- Порт 8000 — стандартный для Python-сервера, 8080 — для Node.js http-server
- Loopback-подсеть 127.0.0.0/8 содержит более 16 млн адресов, из них реально используется один
- ERR_CONNECTION_REFUSED на localhost в большинстве случаев — незапущенный сервер или занятый порт
- VPS с белым IP делает сайт доступным 24/7, localhost виден только на одном компьютере
Что такое http://localhost и чем он отличается от обычного сайта
localhost — это имя хоста, которое всегда указывает на loopback-интерфейс вашего же компьютера, то есть на адрес 127.0.0.1. Этот IP-адрес зарезервирован во всех операционных системах: Windows, macOS и Linux одинаково понимают его как «этот же компьютер», а не какой-то сервер в сети. Когда вы вводите в браузере http://localhost, запрос никуда не уходит через интернет — он остаётся внутри одной машины.
Обычный сайт открывается по домену вроде example.com, который через DNS превращается во внешний IP-адрес чужого сервера, доступного любому пользователю в мире. Адрес localhost работает иначе: сайт по нему видите только вы, на своём устройстве, и никто больше подключиться не сможет. Технически подсеть 127.0.0.0/8 содержит более 16 млн адресов, но на практике используется один — 127.0.0.1.
Разработчику или системному администратору локальный запуск нужен, чтобы проверить код или настройки до того, как они попадут на реальный сервер. Это дешевле и безопаснее: ошибка на localhost не сломает рабочий сайт и не будет видна пользователям. Типичные сценарии такие:
- Проверка вёрстки и скриптов перед выкладкой на боевой сервер
- Тестирование базы данных и API без риска для реальных данных
- Отладка ошибок вроде
ERR_CONNECTION_REFUSEDв изолированной среде - Подготовка проекта к переносу на VPS с белым IP-адресом, когда сайт нужно открыть для всех
Если localhost подходит только для локальной разработки, а сайт нужно показать другим людям через интернет и держать доступным 24 часа в сутки, потребуется отдельный сервер с внешним адресом.
Как работает HTTP-сервер на localhost: порты, протокол, резолвинг имени
Когда вы вводите в браузере http://localhost, операционная система сначала превращает имя localhost в IP-адрес — этот процесс называется резолвингом. За него отвечает файл hosts (в Linux и macOS — /etc/hosts, в Windows — C:\Windows\System32\drivers\etc\hosts) или встроенный резолвер системы, если запись в файле удалена. Результат один и тот же: 127.0.0.1 — зарезервированный IP-адрес localhost во всех операционных системах, и трафик к нему никогда не выходит за пределы вашего компьютера.
Дальше в дело вступает порт — номер, по которому ОС понимает, какой именно программе отправить запрос. По умолчанию браузер обращается к порту 80, но локальные серверы для разработки редко его занимают, поэтому указывают порт явно через двоеточие: http://localhost:8000. Порт 8000 — стандартный для Python-сервера, 8080 — для Node.js http-server, и если вы забудете дописать номер порта, браузер постучится в 80-й и получит отказ. Технически localhost с любым портом ведёт в один и тот же loopback-адрес — просто ОС различает программы внутри него.
Запомните три вещи, которые понадобятся при запуске локального сервера:
- 127.0.0.1 — фиксированный адрес loopback-интерфейса, не требует интернета
- Порт — обязательная часть адреса, если сервер не занял порт 80
- 0.0.0.0 открывает сервер для локальной сети, а не только для себя
Стоит различать localhost и 0.0.0.0. Первый принимает соединения только с этой же машины, второй заставляет сервер слушать все сетевые интерфейсы, включая локальную сеть. Loopback-подсеть 127.0.0.0/8 содержит более 16 млн адресов, из них реально используется один — 127.0.0.1. Сам браузер в этой схеме выступает обычным HTTP-клиентом: он отправляет запрос по протоколу HTTP и ждёт ответ, не зная и не спрашивая, находится сервер на соседнем компьютере или в пределах вашей же машины. Подробнее о том, что вообще такое протокол и зачем он нужен, читайте в статье разбор протокола HTTP.
Как запустить локальный HTTP-сервер на localhost: пошаговая инструкция
Запустить сервер на 127.0.0.1 можно за пару минут без установки лишних программ. Дальше показан рабочий порядок для Windows, macOS и Linux — команды одинаковые, отличается только способ открыть терминал.
По умолчанию локальный сервер виден только на вашем компьютере. Для временного показа проекта другим людям подойдут локальная сеть или туннель, а для постоянной доступности понадобится внешний сервер — оба случая разобраны ниже.
Как поднять локальный сервер по шагам:
- Откройте терминал: в Windows —
PowerShell, в macOS — приложение «Терминал», в Linux — любой эмулятор терминала. - Перейдите в папку проекта командой
cd путь/к/проекту. - Проверьте, что установлен Python версии 3 и выше:
python3 --version. - Запустите сервер командой
python -m http.server 8000— она поднимает HTTP-сервер за 1 команду без установки пакетов. - Откройте браузер и введите адрес
http://localhost:8000. - Как альтернативу для Node.js используйте команду
npx http-server -p 8080— она скачает пакет один раз и запустит сервер на порту 8080. - Проверьте результат по адресу
http://localhost:8080. - Остановите сервер сочетанием клавиш
Ctrl+Cв окне терминала.
Порт 8000 — стандартный выбор для Python-сервера, а порт 8080 чаще используют для Node.js. Если при запуске видите ошибку ERR_CONNECTION_REFUSED, значит сервер не запущен или порт уже занят другим процессом — смените номер порта и попробуйте снова.

Сколько стоит сервер на localhost и когда платить за хостинг
Сервер на 127.0.0.1 ничего не стоит: команда python -m http.server поднимает его за 1 команду без установки пакетов, а порт 8000 живёт только внутри вашего компьютера. Это идеальный вариант для разработки и тестов, пока сайт не готов показывать другим.
Проблема в том, что localhost невидим снаружи по определению. Из подсети 127.0.0.0/8 с её более чем 16 млн адресов реально используется один, и ни у кого за пределами вашей машины нет к нему доступа — даже если проложить кабель до соседней комнаты. Чтобы сайт увидели клиенты, друзья или поисковики, нужен сервер с белым IP-адресом, работающий 24 часа в сутки.
Здесь и начинается выбор между shared-хостингом и VPS (Virtual Private Server, виртуальный выделенный сервер). Виртуальный shared-хостинг дешевле, но делит один физический сервер между сотнями сайтов, поэтому ресурсов и контроля меньше. VPS даёт собственный белый IP, полный доступ к настройкам и стабильную работу под нагрузкой.
| Вариант | Стоимость | Порт/доступ | Доступность |
|---|---|---|---|
| localhost | 0 ₽ | 8000 (Python) или 8080 (Node.js) | только этот компьютер |
| Shared-хостинг | 150–500 ₽/мес | 80/443, общий IP | 24/7, но с ограничениями ресурсов |
| VPS | 300–1500 ₽/мес | любой порт, белый IP | 24/7, полный контроль |
Переходить на платный сервер стоит, когда сайтом должны пользоваться реальные люди, а не только вы. Для проекта с ростом нагрузки логичнее сразу смотреть в сторону VPS, а провайдера оценивать по надёжности и поддержке.
Подобрать сервер под тесты и продакшен
Когда одного компьютера для тестов не хватает, перенесите проект на VPS и держите его доступным 24/7.
Ошибки при запуске localhost и как их исправить
Локальный сервер чаще всего не открывается по трём причинам: он не запущен, его порт занят зависшим процессом или подключение блокирует антивирус. Реже мешают опечатка в адресе и подменённая запись в hosts. Почти все такие ошибки диагностируются парой команд в терминале — разберём их по порядку.
Первая ошибка: сервер не запущен
Браузер показывает ERR_CONNECTION_REFUSED при переходе на http://localhost, потому что сервер не запущен вообще — в 9 случаях из 10 причина в этом или в занятом порте.
Как решить: проверьте терминал, в котором запускали python -m http.server или node. Если он закрыт или выдал ошибку, соединение и не откроется — запустите сервер заново.
Вторая ошибка: порт занят зависшим процессом
Предыдущий запуск сервера не остановили корректно — например, закрыли терминал крестиком вместо Ctrl+C. Процесс продолжает висеть в памяти и держать порт 8000 или 8080, а новый сервер не может на него встать и падает при старте.
Как решить: узнайте, кто занял порт — на Linux и macOS командой lsof -i :8000, на Windows — netstat -ano | findstr :8000. Затем завершите процесс по найденному PID (kill 1234 или taskkill /PID 1234 /F) и запустите сервер заново.
Третья ошибка: блокировка антивирусом или firewall
Некоторые антивирусы и firewall блокируют локальные порты по умолчанию. Временно отключите firewall или добавьте порт 8080 в исключения антивируса.
Четвёртая ошибка: опечатка в адресе
Например, localhost.localdomain вместо localhost резолвится не на всех системах одинаково. В строке браузера должно быть ровно localhost, без лишних доменных окончаний.
Пятая ошибка: подменённый адрес в hosts
Адрес 127.0.0.1 зарезервирован под localhost во всех операционных системах. Если его подменили в файле hosts, сервер отвечает, а браузер всё равно ругается на подключение.
Начинайте проверку с терминала и занятого порта — это закрывает большинство случаев. Если ни один способ не помог за 10 минут, попробуйте другой способ запуска из сравнения ниже.

Python, Node.js или Docker: сравнение способов запустить localhost
Быстрее всего запускается сервер на Python: команда python -m http.server поднимает раздачу файлов за 1 команду без установки пакетов, порт по умолчанию — 8000. Этот способ подходит только для статики: HTML, CSS, картинок и файлов для скачивания. Серверный код на нём не выполнить, поэтому для API и динамических страниц нужен другой инструмент.
Node.js через пакет http-server запускается почти так же просто, но требует предварительной установки Node.js и самого пакета через npm. Порт по умолчанию — 8080. Этот вариант удобен, если сайт уже написан на JavaScript и нужно быстро проверить серверную логику или собранный фронтенд.
Docker — самый тяжёлый по времени старта способ: сначала собирается образ, потом поднимается контейнер, и на это уходит заметно больше 1 минуты при первом запуске. Зато он даёт полную изоляцию окружения: версии языка, библиотеки и системные зависимости не зависят от того, что установлено на компьютере. Это главный плюс для команд, где несколько разработчиков должны получить одинаковый результат.
Коротко о трёх способах запуска:
python -m http.server— статика, порт 8000, ноль зависимостейhttp-serverна Node.js — статика и простой серверный код, порт 8080, нужен Node.js- Docker-контейнер — любой язык и стек, изоляция окружения, порт задаётся вручную
Для локальной проверки любой из способов работает одинаково: сайт виден только на одном компьютере через адрес 127.0.0.1. Чтобы ненадолго показать проект другим людям, хватит доступа по локальной сети или публичного туннеля вроде ngrok — об этом ниже. А для постоянной доступности из интернета понадобится внешний сервер с белым IP.

Когда localhost не подходит и нужен внешний сервер
Для разработки и тестов localhost хватает, для живого проекта — нет. Внешний сервер нужен в пяти случаях:
- Сайт для реальных пользователей Сервер на
127.0.0.1отвечает только на запросы с того же компьютера. Коллега, клиент или покупатель не откроет вашhttp://localhost:8000: у него этот адрес ведёт на его собственное устройство. - Вебхуки от внешних сервисов Запрос с серверов платёжных систем, Telegram-ботов или GitHub до localhost не дойдёт.
- Нужна доступность больше 99% Сайт зависит от вашего компьютера: выключите ноутбук, отправьте в спящий режим или закройте терминал — и он пропадёт. Процесс
python -m http.serverсам не запустится после перезагрузки, а домашний провайдер может без предупреждения сменить IP-адрес (Internet Protocol, сетевой адрес устройства) — см. как узнать свой внешний IP-адрес. - Защищённое соединение для домена Для домена нужен сертификат HTTPS (HTTP Secure, защищённая версия протокола) от Let’s Encrypt.
- Запуск в продакшен Приложение в продакшене должно выдерживать нагрузку.
Решение — VPS с белым IP: он работает круглосуточно, 7 дней в неделю, и открывается из любой сети. Тариф можно выбрать в рейтинге VPS-хостингов.
Как открыть доступ к localhost с телефона или из интернета
На телефоне адрес localhost указывает на сам телефон, поэтому ваш сайт там не откроется. Узнайте IP-адрес (Internet Protocol) компьютера в домашней сети. В Windows это делает команда ipconfig, в Linux — ip a, в macOS — ipconfig getifaddr en0. Затем откройте на телефоне адрес вида http://192.168.1.10:8000. Оба устройства должны быть в одной сети Wi-Fi, а сервер должен принимать внешние подключения: python -m http.server 8000 --bind 0.0.0.0.
Чтобы сайт открывался из интернета, можно настроить на роутере проброс порта, например внешнего порта 8080 на ваш компьютер. Но тогда домашний компьютер увидят боты, которые круглосуточно ищут открытые порты. К тому же многие провайдеры не дают белый IP. Надёжнее запустить туннель: команда ngrok http 8000 выдаёт публичный адрес с HTTPS (защищённым HTTP). Адрес работает, пока запущена программа.
Все эти способы работают, только пока включён ваш компьютер. Если проект должен быть доступен 24/7, нужен VPS для сайта с белым IP — виртуальный сервер, который работает в дата-центре.
Какой способ открыть доступ к localhost выбрать под задачу:
- IP в локальной сети подходит, чтобы проверить сайт на телефоне в том же Wi-Fi.
- Проброс порта даёт постоянный доступ, но повышает риск взлома.
- Туннель ngrok подходит, чтобы на 1–2 часа показать сайт заказчику.
- VPS держит сайт в сети круглосуточно без вашего компьютера.
Частые вопросы
Что такое http://localhost и чем он отличается от 127.0.0.1?
Почему localhost не открывается в браузере?
Как узнать, какой порт занят на localhost?
Можно ли открыть localhost с телефона в той же сети?
Что делать, если браузер пишет ERR_CONNECTION_REFUSED на localhost?
Как остановить сервер, запущенный на localhost?
Чем localhost отличается от 0.0.0.0 при запуске сервера?
Можно ли использовать localhost в продакшене?
Как открыть доступ к localhost из интернета?
Почему сайт работает на localhost, а на сервере — нет?
Итоговый чек-лист
Когда запустите локальный сайт, сверьтесь со списком. Он поможет понять, почему страница не открывается в браузере или на телефоне.
- Сервер на localhost запущен, и выбранный порт не занят другим процессом
- В браузере открывается http://localhost:ПОРТ без ошибки подключения
- Firewall или антивирус не блокирует выбранный порт
- Для доступа с телефона в сети указан IP-адрес компьютера, а не localhost
- Сервер остановлен (Ctrl+C) после проверки, чтобы не занимать порт
- Для публичного доступа выбран VPS с белым IP, а не проброс порта из дома
- Версия Python или Node.js подходит для выбранной команды запуска
Когда сайт готов показывать другим людям, localhost уже не подходит: нужен сервер с белым IP. Об этом шестой пункт.
Источники
На сайте есть партнёрские ссылки: если вы оформите заказ по ним, мы получим вознаграждение от провайдера. Это не влияет на цену для вас и на место в рейтинге.