Linux & Administration

Локальный / веб-сервер

Веб-сервер — программа, отвечающая на 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.

Связанные термины

  • Nginx — самый распространённый веб-сервер
  • Apache — второй классический веб-сервер
  • LEMP-стек — типовой набор для боевого сайта
  • HTTP — протокол, на котором всё это работает
  • Gunicorn / WSGI — чем запускают Python-приложение всерьёз
  • Docker — современный способ поднять локальное окружение

Готовы запустить GPU-задачу?

Запустить GPU-сервер