Создание своего личного веб-сервера

Создание своего личного веб-сервера - основные понятия и технологииСоздание своего личного веб-сервера - основные понятия и технологии Предисловие Эта статья не просто объясняет, что такое

Создание своего личного веб-сервера – основные понятия и технологии

Предисловие
Эта статья не просто объясняет, что такое веб-сервер, зачем он нужен и как работает, но и проводит читателя по пути создания своего собственного сервера, так что читатель впоследствии сам сможет дать устраивающий его ответ на все эти вопросы.
Вступление
Каждый новый пользователь интернета достаточно рано начинает понимать, что появляющаяся в его навигаторе информация скачивается с сервера. Также он очень быстро усваивает, что разные сайты, скорее всего, расположены на разных серверах. Но что такое сервер, как он выглядит, и как отличить его от любого другого предмета, знают, оказывается, далеко не все. Рассказы людей, видевших сервер своими глазами, интригуют. Из этих рассказов можно понять, что сервер – это суперкомпьютер с двумя процессорами, расположенный в специальном подвале под замком, а всемогущий администратор регулярно “тельнетится” к своему детищу, чтобы просматривать логи и отражать хакерские атаки, подобно герою звёздных войн. Всё это правда, но количество вопросов она не уменьшает.

Провести ликбез я предлагаю радикальным способом: создайте свой веб-сервер. Причём не уступающий функционально серверу, к примеру, “яндекса”. Вы скоро убедитесь, что это не требует денежных затрат и по силам каждому. Нам потребуется только персональный компьютер под управлением операционной системы Windows 2000 (Pro, Server) или похожей (XP, 2003) и соединение с интернетом. Я уверен, что лет через 20 в мире (или, как сейчас модно говорить, “на рынке”) личных серверов с личными сайтами будет столько же, сколько сейчас мобильных телефонов.

Что такое сервер
Начнём с определения. Сервер (от to serve – служить) – это программа, способная принимать запросы от других программ и выдавать им ответ; то есть, обслуживающая другие программы. Предположим, что у нас есть программа calc.exe, способная понимать запросы в виде математических выражений и выдавать результат вычисления этих выражений. Это будет самый что ни на есть типичный сервер! Программа, способная делать запросы к другой программе и получать от неё ответ, называется клиентом.

Кроме того, “сервером” часто называют компьютер, на котором запущена программа-сервер и основная роль которого – эту программу выполнять. Компьютер-сервер совсем не обязан быть мощным. Но если он обрабатывает сотни запросов в секунду, то мощным ему быть не помешает, чтобы клиенту не пришлось слишком долго ожидать отклика. Кстати, такая ситуация уже несколько лет существует на сервере, адресуемом narod.yandex.ru – файлы с него качаются очень медленно (особенно из-за границы).

Веб-сервер – это серверная программа, обрабатывающая запросы по протоколу HTTP. Протокол HTTP регламентирует вид запросов на получение гипертекстовой информации и вид ответов на эти запросы. Роль клиентов веб-серверов чаще всего играют навигаторы, но ими также могут быть менеджеры закачек и разные другие программы. Когда вы набираете в адресной строке навигатора “http://rambler.ru”, он делает запрос HTTP к соответствующему серверу с просьбой получить главную страницу, а полученную страницу отображает в своём окне.

В слове “веб-сервер” приставку “веб-” часто отбрасывают для краткости, что вносит окончательную неразбериху в терминологию. Давайте для ясности вспомним, что термином “сервер” обозначают: программу-сервер, компьютер-сервер, а в частных случаях – программу-веб-сервер, компьютер-веб-сервер, программу-сервер баз данных и т.д.

Теория и практика клиентсерверного взаимодействия
Итак, смысл жизни программы-сервера – обслуживать программы-клиенты. Как одна программа может обратиться к другой? Современные операционные системы (Windows, *NIX и др.) предоставляют для этих целей два основных средства: каналы (pipes) и сокеты (по-русски – розетки). Причём при помощи сокетов (я буду употреблять этот американизм по причине всеобщего непонимания русских слов) клиент может обратиться не только к серверу, запущенному на том же компьютере, где он сам, но и к расположенному на другом компьютере, доступ к которому происходит через сеть. Все сетевые протоколы (HTTP, FTP,…) предполагают клиент-серверное взаимодействие только через сокеты.

Любая программа может открыть сокет, присвоив ему номер, называемый номером порта. Между двумя любыми открытыми сокетами (портами) возможно перетекание информации. Как правило, сервер открывает порт с постоянным номером (чтобы клиенты всегда знали, куда обращаться) в самом начале своей работы, а клиент открывает порт с произвольным меняющимся номером (если один номер занят – выбирается другой) непосредственно перед транзакцией и закрывает порт после неё. Некоторые программы сочетают в себе функции сервера и клиента, например, ICQ в качестве сервера ожидает новые сообщения, а в качестве клиента сама посылает сообщения другому экземпляру ICQ, запущенному на другом компьютере.

Кстати, из-за внутренней ошибки программа может выдать не то, что у неё запросили. Например, та же ICQ (а ошибок в ней тьма) может вдруг выдать удалённому клиенту содержимое какого-нибудь файла на вашем компьютере (а этот файл может содержать какой-нибудь ваш пароль).

Какие порты открыты у вас в данный момент, и кто к ним подключен, можно посмотреть в фаирволе (если ваша фаирволь поддерживает такую возможность) или утилитой “fport”. Если запустить ICQ, то в списке портов вы обнаружите что-то вроде “ICQLITE.EXE TCP all:4752”, то есть, открыт порт 4752 (проверьте).

Номер порта можно назвать адресом программы внутри компьютера. Но для осуществления межсокетной коммуникации нужно ещё знать адрес компьютера внутри сети. Каждый компьютер тоже имеет номер, называемый адресом IP. Адрес IP – 4-байтное число. Чаще всего каждый байт записывают отдельно через точку, например “1.2.3.4”, хотя можно и в шестнадцатеричном или восьмеричном виде, например “0x01020304”.

Адреса от 127.0.0.0 до 127.255.255.255 зарезервированы для работы внутри собственного компьютера, и адрес 127.0.0.1 практически всегда адресует собственный компьютер. Адреса в диапазонах 10.0.0.0 – 10.255.255.255, 172.16.0.0 – 172.31.0.0 и 192.168.0.0 – 192.168.255.0 адресуют компьютеры в локальной сети. Куда вы попадёте, набирая эти адреса, зависит от того, к каким компьютерам ведёт провод, выходящий из вашей сетевой карты, от конфигурации этих компьютеров, но, самое главное, от их наличия (отсутствия), и от наличия самой сетевой карты 🙂 Если адрес компьютера не входит в вышеупомянутые диапазоны, значит, мы имеем дело с компьютером во внешней сети (интернет). [1].

Теперь я предлагаю сделать HTTP-запрос к какому-нибудь серверу, например, к серверу, запущенному на компьютере с адресом 1.2.3.4 и открывшему порт номер 80. Для того, чтобы делать любые запросы к любому серверу, используйте программу telnet, входящую в дистрибутив Windows. Откройте командную строку и напишите:

Оцените пользу
( Пока оценок нет )
Поделитесь с друзьями
Добавить комментарий