Что такое сервер, какие бывают виды и как он работает

Что такое сервер, какие бывают виды и как он работает Полезное

Сервер — это узел, который принимает запросы от других программ и отвечает на них. Слово используют в трех разных смыслах, и их важно не путать: сервер-железо (физическая машина), сервер-программа (софт вроде nginx или PostgreSQL) и сервер-роль (логическая функция «отвечать на запросы»). Ниже разберу все три смысла, покажу принцип запрос-ответ с портами на рабочем примере, сведу виды серверов в таблицы и разграничу физический, виртуальный и облачный варианты.

Три смысла слова «сервер»

Мини-словарь, чтобы дальше не путать понятия:

  • Сервер-железо — физический компьютер, собранный под круглосуточную нагрузку: серверные процессоры, память с коррекцией ошибок (ECC), дублированные блоки питания и сетевые карты, дисковые массивы. Обычно стоит в стойке в дата-центре.
  • Сервер-программа — приложение, которое слушает сетевой порт и обрабатывает запросы: веб-сервер nginx, СУБД PostgreSQL, почтовый Postfix. Это и есть «серверный софт».
  • Сервер-роль — логическая сторона в обмене «клиент — сервер». Именно роль, а не устройство: одна и та же машина бывает сервером для одних соединений и клиентом для других.

Практический вывод: чаще всего «сервер» означает роль и программу, а не именно мощное железо. На домашнем ноутбуке можно запустить веб-сервер nginx — и по роли это будет сервер, хотя железо осталось обычным ПК. Мощное серверное железо нужно не для того, чтобы «стать сервером», а чтобы держать высокую нагрузку и работать без простоев.

Чем серверное железо отличается от домашнего ПК

Персональный компьютер рассчитан на одного пользователя и на работу с перерывами. Серверная машина рассчитана на много одновременных клиентов и на непрерывную работу, поэтому у нее другие приоритеты:

  • Отказоустойчивость важнее пиковой скорости: дублируются блоки питания, сетевые карты, диски в RAID-массиве. Вышел из строя один элемент — работу продолжает резервный.
  • Память с коррекцией ошибок (ECC) ловит одиночные сбои бит, чего в бытовых ПК обычно нет.
  • Форм-фактор под стойку: плоские корпуса, которые ставят в шкафы-стойки, чтобы уплотнить размещение, питание и охлаждение.

Это не жесткая граница: маломощная роль сервера прекрасно живет и на обычном железе. Серверное железо — про надежность под нагрузкой, а не про сам факт «серверности».

Принцип работы: клиент, сервер, запрос-ответ, порты

Клиент-серверная модель — это распределение ролей. Клиент формирует запрос, сервер-программа его принимает, обрабатывает и возвращает ответ. Сервер при этом пассивно «слушает» заранее назначенный порт и ждет входящих соединений.

Сквозная линия на одном примере — открытие сайта в браузере:

  1. Браузер (клиент) резолвит имя example.com в IP-адрес через DNS.
  2. Браузер открывает соединение к этому IP на порт 443 (HTTPS) и шлет HTTP-запрос GET /.
  3. Веб-сервер (например, nginx), который слушает порт 443, принимает запрос, готовит ответ (HTML-страницу).
  4. Сервер возвращает ответ с кодом состояния (200 — успех, 404 — страница не найдена, 500 — ошибка на сервере).

Порт нужен, чтобы на одном IP-адресе уживалось несколько серверных программ: веб-сервер на 443, база на 5432, SSH на 22. Адрес приводит к машине, порт — к конкретной серверной программе на ней.

Соберу минимальный рабочий сервер на Python, чтобы увидеть запрос-ответ вживую. Стандартный модуль http.server уже содержит простой веб-сервер:

from http.server import HTTPServer, BaseHTTPRequestHandler

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-Type", "text/plain; charset=utf-8")
        self.end_headers()
        self.wfile.write("Привет от сервера".encode("utf-8"))

server = HTTPServer(("127.0.0.1", 8000), Handler)
print("Слушаю порт 8000, жду запросы")
server.serve_forever()

Запускаю (проверено на Python 3.14). В консоли сервер сообщает, что слушает порт:

Слушаю порт 8000, жду запросы

Теперь из второго терминала выступаю клиентом — шлю запрос тем же протоколом HTTP:

curl http://127.0.0.1:8000/

Ответ приходит от нашего обработчика do_GET:

Привет от сервера

Здесь видны все элементы модели: программа заняла порт 8000 и стала сервером по роли; curl сыграл клиента; прошел цикл запрос-ответ. Обратите внимание на адрес 127.0.0.1 (localhost) — сервер доступен только с этой же машины, наружу в сеть он не выставлен. Это учебный пример: у него нет ни ограничения числа соединений, ни TLS, ни аутентификации, поэтому в реальную сеть такой сервер не выставляют.

Частые порты, которые стоит запомнить

Порт Сервис Назначение
22 SSH удаленный доступ к серверу и управление
25 SMTP пересылка почты между серверами
53 DNS разрешение имен в IP-адреса
80 HTTP веб без шифрования
443 HTTPS веб поверх TLS (шифрование)
5432 PostgreSQL подключение к базе данных

Это распространенные значения по умолчанию, а не жесткое правило: администратор может повесить сервис на другой порт.

Серверный софт на примере nginx

Веб-сервер — это программа, а не «сайт». Задача nginx или Apache httpd — принять HTTP-запрос и отдать нужный ответ: файл с диска, ошибку 404 или проксировать запрос дальше в приложение. Минимальный смысловой блок конфигурации nginx выглядит так:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Разбор по строкам: listen 80 — слушать порт 80; server_name — для какого домена этот блок; root — откуда брать файлы; location / с try_files — искать запрошенный файл, а если его нет, вернуть 404 вместо тишины. nginx и Apache решают одну задачу по-разному: nginx исторически про событийную модель и раздачу статики/проксирование, Apache — про гибкую модульность и .htaccess. Для новичка достаточно понимать, что оба — это серверный софт, слушающий порт.

Даже на учебном сервере первым делом настраивают защиту, а не только «чтобы отвечал»: закрывают лишние порты фаерволом, включают HTTPS (порт 443, сертификат TLS), не пускают анонимный доступ к внутренним сервисам, ограничивают права пользователя, от имени которого работает процесс. Публичный сервис без этих шагов — это открытая дверь.

Виды серверов по назначению

Один и тот же физический сервер может совмещать несколько ролей, но удобнее разделять их по решаемой задаче:

Вид Что делает Типовой софт
Веб-сервер отдает страницы и статику по HTTP/HTTPS nginx, Apache httpd
Сервер БД хранит данные и выполняет запросы к ним PostgreSQL, MySQL
Почтовый принимает и пересылает письма (SMTP/IMAP) Postfix, Dovecot
Файловый дает общий сетевой доступ к файлам Samba, NFS
DNS-сервер переводит имена доменов в IP-адреса BIND, Unbound
Прокси-сервер посредник между клиентом и другими серверами nginx, HAProxy, Squid
Игровой синхронизирует состояние многопользовательской игры зависит от конкретной игры

Как выбирать при чтении такой таблицы: сначала называете задачу («нужно отдавать сайт», «хранить данные», «раздавать файлы»), а под нее подбираете вид сервера и софт, а не наоборот.

Физический, виртуальный и облачный сервер

Это разрез не по назначению, а по способу, которым сервер получает вычислительные ресурсы:

Признак Физический (bare metal) Виртуальный (VPS/VM) Облачный
Что это отдельная железная машина целиком виртуальная машина на гипервизоре, делит одно железо с соседями ресурсы, выделяемые по запросу у провайдера
Изоляция полная, железо ваше логическая, соседи делят хост логическая, управляется провайдером
Масштабирование купить и смонтировать железо изменить лимиты ВМ добавить ресурсы за минуты
Оплата разовые затраты плюс обслуживание фиксированная за ВМ за фактическое потребление
Когда брать стабильная высокая нагрузка, особое железо предсказуемый проект средней нагрузки переменная нагрузка, быстрый старт

Упрощенно облачный сервер — это тоже чаще всего виртуальная машина, но с оговоркой: облако добавляет к ней эластичную оплату по потреблению и управляемые сервисы (готовые БД, балансировщики, резервное копирование). Одноплатные компьютеры вроде Raspberry Pi — тоже физические серверы, только маломощные: их берут под датчики «умного дома» и учебные проекты из-за низкого энергопотребления, а не под серьезную нагрузку.

Выводы

  • Слово «сервер» имеет три смысла: железо, программа (софт) и роль в обмене. Чаще всего речь про роль и программу, а не про мощное железо.
  • Основа работы — клиент-серверная модель: клиент шлет запрос, серверная программа слушает порт и возвращает ответ с кодом состояния.
  • Порт указывает на конкретную серверную программу на машине; типовые значения (80, 443, 22, 53) — это умолчания, а не догма.
  • Виды серверов удобно делить по назначению (веб, БД, почта, файлы, DNS, прокси, игры) и отдельно по способу получения ресурсов (физический, виртуальный, облачный).
  • Публичный сервер настраивают вместе с защитой: фаервол, HTTPS, ограничение прав и доступа, а не только «чтобы отвечал».

Где применяется / связь с практикой

Серверами занимаются системные администраторы и DevOps-инженеры, а веб-разработчики и бэкендеры настраивают серверный софт под свои приложения. На практике почти все это — Linux: подавляющее большинство веб-серверов и облачных машин работает под Linux, поэтому вход в тему начинается с командной строки, пакетов, прав доступа и настройки сервисов вроде nginx.

Освойте тему на практике

Если хочется перейти от определения к практике — поднять свой сервер, настроить веб-сервер и разобраться с сетью и правами, — системный старт дает курс Linux для начинающих. Посмотреть формат и живое занятие с преподавателем можно на бесплатных открытых уроках Otus — удобный способ понять, подходит ли тема, до старта обучения.

FAQ

Сервер и хостинг — это одно и то же?
Нет. Сервер — это машина или программа, которая отвечает на запросы. Хостинг — услуга: провайдер сдает вам ресурсы сервера (или его часть) в аренду и обслуживает железо. Хостинг предоставляет сервер, но не равен ему.

Можно ли сделать сервер из старого домашнего компьютера?
Да, по роли и софту — достаточно установить серверную программу и открыть доступ по сети. Но под постоянную нагрузку такой сервер уступает специализированному железу: нет резервирования питания и дисков, памяти ECC, поэтому для учебы это подходит, а для ответственного сервиса — нет.

Сервер обязательно подключен к интернету?
Нет. Сервер работает и в изолированной локальной сети: файловый или сервер БД внутри офиса может вообще не иметь выхода в интернет. Интернет нужен только тем ролям, которые обслуживают внешних клиентов.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)