Локальный / веб-сервер
Веб-сервер — программа, отвечающая на HTTP-запросы; локальный сервер — та же связка, поднятая на своей машине для разработки.
Что такое веб-сервер
Веб-сервер — программа, которая принимает HTTP-запросы и отвечает на них: отдаёт файл с диска или передаёт запрос приложению и возвращает то, что оно сгенерировало. Классические представители — Nginx, Apache, IIS, Caddy.
Словом «сервер» называют и железную машину, и программу на ней. В этой статье речь о программе: веб-сервер спокойно живёт на вашем ноутбуке.
Путь запроса от браузера до ответа:
Браузер: https://example.ru/blog/post-1
↓ DNS: example.ru → 203.0.113.10
↓ TCP-соединение на порт 443, TLS-рукопожатие
↓
Веб-сервер (Nginx) на 203.0.113.10
├─ /static/style.css → отдать файл с диска, конец
└─ /blog/post-1 → передать приложению (proxy_pass / FastCGI)
↓
Приложение: маршрут, запрос в БД, шаблон
↓
HTML → Nginx → браузер
Отсюда разделение труда: статику веб-сервер отдаёт сам, потому что делает это быстрее любого приложения; динамику передаёт дальше и работает обратным прокси.
Что такое локальный сервер
Локальный сервер — тот же веб-сервер, только поднятый на вашем компьютере и доступный обычно только с него. Живёт он по адресу 127.0.0.1 (он же localhost) — специальному IP-адресу, который всегда означает «эта машина». Адрес вида http://localhost:8000 — это «программа на моём компьютере, слушающая порт 8000».
Нужен он затем, что править код прямо на боевом сайте — плохая идея: сломанная страница видна всем, а ошибку не отладить. Локально вы ломаете и чините сколько угодно, никого не задев.
| Локальный сервер | Боевой (production) | |
|---|---|---|
| Адрес | localhost, 127.0.0.1 |
публичный IP и домен |
| Кто видит | только вы | весь интернет |
| Показ ошибок | подробный traceback на странице | лог, пользователю — общая заглушка |
| HTTPS | обычно не нужен | обязателен |
| Данные | тестовые | настоящие |
| Где крутится | ноутбук | VPS или облачный сервер |
Как поднять локальный сервер
Самый быстрый способ — встроенный сервер вашего фреймворка, никакой установки:
python3 -m http.server 8000 # раздать текущую папку как статику
php -S localhost:8000 # встроенный сервер PHP
python manage.py runserver # Django
Отдельные сборки — XAMPP, OpenServer, Laragon — ставят Apache, PHP и MySQL одним установщиком. Работают, но у них есть врождённая проблема: версии в сборке отличаются от версий на боевом сервере, и «на моей машине работает» становится реальностью.
Поэтому сегодня чаще берут Docker — окружение описывается файлом и совпадает с боевым:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./site:/usr/share/nginx/html:ro
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: devpass
docker compose up — и локальная копия боевого стека готова, а down убирает её без следов в системе.
Важно: встроенный сервер — не для боевого
Серверы разработки (runserver, php -S, http.server) однопоточные, медленные и не рассчитаны на враждебный трафик — об этом прямо пишут их авторы. В production приложение запускают через Gunicorn, uWSGI или php-fpm и ставят перед ним Nginx.
Связанные термины
Готовы запустить GPU-задачу?
Запустить GPU-сервер