Найти тему
ZDG

Как работает веб-сайт #2: Порты, сокеты и выбор веб-сервера

В этой части мы узнаем, что такое порты и сокеты, а затем приглядим себе подходящий веб-сервер для установки.

Предыдущая часть:

Как мы выяснили во введении, чтобы получить HTML-документ с сервера, нужно установить с ним связь. Но мы также выяснили, что разговаривать с сервером нужно по определённому протоколу, и что протоколов может быть много.

На сервер, который выставлен голой ж в интернет, стучатся: веб-браузеры (HTTP), почтовые программы (SMTP), файловые качалки (FTP), удалённый доступ (RDP и SSH) и многие другие, включая вирусы и эксплойты, то есть постоянно приходит много запросов c использованием разных протоколов.

Но адрес у сервера только один. По аналогии с телефоном – как быть, если абонентов много, а телефонный номер только один? Кто должен поднимать трубку и отвечать, когда поступает звонок?

В больших организациях такая проблема решается с помощью добавочного номера. То есть вы звоните на общий номер организации, а затем набираете добавочный номер конкретного сотрудника, и разговариваете конкретно с ним.

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

Номер 80 – это стандартный порт, на котором сидит веб-сервер, готовый общаться по протоколу HTTP.

Соответственно, браузер, соединяясь с чужой машиной с целью пообщаться по HTTP, просит "дратути, добавочный 80, пожалуйста".

А вот если вы захотите общаться по протоколу FTP, то надо попросить порт 21. Потому что там отвечает уже FTP-сервер.

А для отправки почты нужен будет порт 25. Там отвечает SMTP-сервер.

И прочее в том же духе.

Но это всё лирическое отступление. Мы занимаемся конкретно HTTP-сервером и поэтому запомним, что его порт – 80.

Далее, есть ещё одна проблема. Как мы знаем, если позвонить кому-то на телефон, то пока вы разговариваете, другие на этот телефон дозвониться не смогут. Телефон абонента занят.

Но обращаясь к серверу, было бы абсурдом ждать, пока кто-то другой закончит качать порн сеанс связи.

Как этот вопрос решается в больших организациях, опять же? С помощью многоканального телефона. Телефонный номер один, а сеансов связи много.

То же самое умеет и сервер. Когда вы соединяетесь с ним, для вас выделяется отдельный ресурс, который называется "сокет" (socket). Переводится как "розетка" или "разъём", то есть, наверно, разработчики представляли себе примерно такую картину:

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

Мы вернёмся к этой теме, когда настанет пора, а пока хватит общего знакомства. Давайте уже поговорим про собственный веб-сервер.

Для чего ставить веб-сервер на свой компьютер?

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

Какие бывают веб-серверы?

Веб-сервером может быть любая программа, которая "слушает" 80-й порт и отвечает на соединение, понимая протокол HTTP. Её даже можно написать самостоятельно.

Но реально рабочее, промышленное решение требует широкого функционала, устойчивости и масштабируемости. Поэтому две главные фигуры среди веб-серверов это Apache и Nginx.

Apache ("Апач") это седой патриарх интернета с очень длинным послужным списком. Nginx ("Энджин-Икс") моложе, и сделан с упором на быстродействие в ущерб некоторым другим фишкам.

Ах да, есть ещё Microsoft IIS (Internet Information Services), но это сугубо Windows-решение, в то время как Apache и Nginx мультиплатформенны.

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

Нужно ли ставить LAMP или DENWER?

LAMP – это аббревиатура Linux, Apache, MySQL, PHP. То есть это пакет, в который входят: операционная среда, веб-сервер, база данных и язык программирования. Для Windows это будет соответственно WAMP. DENWER – примерно то же самое (Джентльменский Набор Веб-Разработчика).

Эти пакеты, или "сборки", довольно популярны среди начинающих веб-программистов. Самостоятельно установить и настроить веб-сервер, подключить базу данных и PHP-скрипты для них непростая задача. А такие сборки устанавливают и настраивают всё сами.

Но вот лично я не рекомендую ими пользоваться. Вы никогда не знаете, кто и чего туда напихает. Они тянут с собой много ненужного. И они всё равно могут работать криво. Ну и наконец, вы так никогда не научитесь ничего настраивать.

Что предлагаю я?

Я предлагаю абсолютно брутальное решение. Мы начнём с установки голого чистого Apache без каких-либо вспомогательных костылей. Но я обещаю, что там не будет ничего страшного. Установка будет простой, и вы сможете смотреть собственный сайт уже через 5 минут.

Читайте дальше: