Веб-сервер

Количество просмотров 191
Сложность:

Веб-сервер или HTTP-сервер принимает запросы от пользователей (их браузеров) и выдаёт на них ответы. Про это тему написано множество огромных книг, но я попытаюсь рассказать о веб-серверах коротко и понятно. То есть всю статью я буду максимально упрощать информацию так, что было понятно даже новичку.

Речь в статье идёт именно о внешних веб-серверах, а не о бек-енде (например, node.js) приложений.

Простой пример работы веб-сервера: посетитель вводит адрес вашего сайта и, после обработки DNS-сервером (название сайта => ip-адрес), запрос переходит к компьютеру, где расположен сайт. Думаю, что вы поняли, что компьютером является сервер, который вам предоставляет хостинг.

Внутри физического устройства сервера работает программа Веб-сервер. Она получает от вас запрос методом GET, который ей нужно обработать. GET - значит вы хотите что-то получить от веб-сервера. Скорее всего вы хотите получить в ответ содержимое страницы сайта. Страница сайта - это текст, изображения, скрипты, стили страницы, мета-теги и т.д. Веб-сервер вам это всё отдаёт, и вы видите, как страница загружается.

В зависимости от метода реакция сервера на запросы меняется.

  • GET - получить
  • POST - создать/опубликовать
  • PUT/PATCH - обновить
  • DELETE - удалить

Запросы делаются по определенным адресам. Но результаты обработки запросов с разными методами отличаются даже если вы используете один адрес. Например, запросы к странице /test.html с методами GET и DELETE будут обрабатываться противоположно. Первый запрос получит в ответ содержимое страницы, а второй эту страницу удалит.

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

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

Apache и nginx

Apache выпустили в 1995 году. Долгое время он был самым популярным решением, но в последнее время его обошёл nginx. Оба эти решения предоставляют всю основную функциональность и отличаются лишь очень специфичными вещами, которые могут заинтересовать только узкоспециализированных специалистов.

Оба веб-сервера бесплатны. Оба отличаются высокой производительностью, но nginx немного быстрее. Самое интересное, что их можно использовать вместе для решения определенных задач (так называемый реверс-прокси). То есть запросы принимает сначала nginx, некоторые из них обрабатывает сам, а некоторые (более сложные) отдаёт Apache, получая потом от него ответ.

У каждого из этих веб-серверов есть основные файлы настроек. В ubuntu они хранятся внутри папки /etc и получить к них доступ с обычного виртуального хостинга вы не сможете. Особенность Apache в том, что там можно разрешить использовать настройки из файла, который лежит в папке с сайтом. Файл этот называется .htaccess. Основной файл настроек nginx называется nginx.conf. Более подробную информацию об этих файлах с примерами можно посмотреть в отдельной статье.

В последнее время некоторые виртуальные хостинги начали использовать только nginx и даже дали возможность редактировать его настройки. При использовании VDS вы сами выбираете, какой веб-сервер установить.

Сайт, на котором вы сейчас находитесь, использует веб-сервер nginx. Причём настроено реверс-прокси, так как сайт является приложением nuxt.js + node.js. То есть на локальном порте 3000 внутри сервера через менеджер процессов pm2 запущено приложение (данный сайт). А nginx принимает запросы от посетителей и отдаёт их локальному приложению. Приложение обрабатывает запросы и отдаёт ответы для nginx. Затем nginx уже отдаёт ответ вам, посетителям.

Цифры

Полноценное изучение работы HTTP, методов запросов, включая практику - несколько недель.

Установка и настройка веб-сервера Apache или nginx на VDS/выделенный сервер - от 30 минут до 2 часов.

Видеоверсия