Второй урок. Работа сервера

Итак, вы запустили Open Server и свою первую страничку. Для начала разберемся как работает сервер.

Слово «сервер» имеет несколько значений. В первую очереь это компьютер. Физически, где есть корпус, материнская плата, жесткие диски и т.д. С другой стороны «сервер» это специальная программа, которая обслуживает некие запросы к компьютеру. Например есть ftp-сервер, http-сервер, сервер MySQL (база данных) и т.п. Со временем вы научитесь понимать значение этого слова исходя из контекста предложения.

Когда браузер выполняет загрузку любого сайта, то на самом деле он выполняет запрос к серверу. Это довольно сложный процесс, но в утрированном виде он делает запрос к вашему провайдеру Интернета, а тот в свою очередь, получает нужные файлы с физического сервера, где сайт расположен (хостится) и передает на ваш компьютер. Браузер интерпретирует файлы и вы видите страницу.

Интернет устроен так, что все сайты (их сервера) имеют определенный ip-адрес. В IPv4 это 4 числа, разделенные точками, например 192.168.0.1.

Задание. Прочитать про IP-адрес на википедии.

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

Ряд IP-адресов по стандарту имеют специальное назначение. Один из них — это диапазон адресов с 127.0.0.1 по 127.255.255.255, который называется localhost (локальный хост), что просто указывает на этот же компьютер. Как правило на компьтере настраивается только один IP-адрес 127.0.0.1. То есть когда в браузере набирается localhost, то это автоматически подразумевает 127.0.0.1.

Чтобы по этому адресу вывести какую-то полезную информацию, например сайт, на компьтере следует запустить http-сервер. Наиболее распространены это Apache и Nginx. Как правило вы будете иметь дело с Apache, что на локальном сервере, что на реальном сайте. Apache — это специальная программа, которую вы установили с Open Server. Чем он хорош, так это тем, что Open Server выполняет всю конфигурацию автоматически (или через удобные настройки) и нет необходимости настраивать Apache вручную через файлы.

Apache «перехватывает» обращения к localhost и тем самым позволяет нам «подсунуть» нужные файлы для выдачи, как это вы сделали с hello.php.

Таким образом мы получаем соответствие адреса в браузере с реальным расположением на жестком диске. В нашем примере адрес http://localhost/ соответствует каталогу d:\OpenServer\domains\localhost\ (у вас может быть другое расположение Open Server).

Соответственно адрес http://localhost/hello.php указывает на файл d:\OpenServer\domains\localhost\hello.php

Что делать, если мы захотим разместить на локалхосте несколько сайтов? Самым простым решением будет создать подкаталоги для каждого из их. Сделаем каталог domains\localhost\site1 (путь на диске я привожу относительно каталога Open Server). Логично предположить, что это будет адрес в браузере localhost/site1.

Наберите его и мы увидим сообщение «Index of /site1» похожее на список файлов. Скопируем в этот каталог hello.php и обновим страницу в браузере (клавиша F5). Мы увидим этот файл в списке. Если по нему кликнуть, то произойдет переход по http://localhost/site1/hello.php и мы получим знакомое «Привет!».

Таким образом вы можете размещать на localhost любое количество не связанных между собой сайтов.

Чтобы по адресу localhost/site1 сразу отдавался нужный файл, нужно использовать index.php. Просто копируйте hello.php как index.php и обновите страницу в браузере. Вы увидите «Привет!». Это произошло из-за того, что Apache был сконфигурирован таким образом, что файл index.php является индексным файлом. Когда такой файл находится в каталоге, то он автоматически будет подключаться для главной страницы сайта.

Для конфигурирования сервера для каталога используется специальный файл .htaccess (с точкой в начале). Это обычный текстовый файл, где указываются специальные директивы для Apache. Их довольно много, поэтому мы рассмотрим лишь несколько простых случаев.

Все действия будут в каталоге site1. В нём должны быть два файла index.php и hello.php.

1. Отредактируйте файл index.php, чтобы вы нем был текст «Привет, index!».

2. Отредактируйте файл hello.php, чтобы вы нем был текст «Привет, hello!». Таким образом в браузере мы сможем их различить.

3. Создайте файл .htaccess с одной строчкой DirectoryIndex hello.php

4. Передите на localhost/site1. Вы должны увидеть «Привет, hello!».

Таким образом директива DirectoryIndex позволяет задавать имя индексного файла. Как правило на серверах это: DirectoryIndex index.php

Обратите внимание, что все текстовые файлы должны быть в кодировке UTF-8 без сигнатуры BOM. Данная сигнатура — специальные символы, которые не видны при обычном текстовом просмотре. Данная сигнатура будет выводится перед основным текстом, что приведёт к проблемам на сайте.

Теперь создадим еще один каталог/сайт site2 (localhost/site2). В него мы скопируем только что созданный .htaccess и посмотрим, что выдает сервер. Мы опять видим пустой список файлов «Index of /site2». На реальном сайте следует скрывать такой список в целях безопасности (вдруг там секретный документ находится?).

Для скрытия используется директива Options -Indexes. Добавьте её и обновите страницу. Мы увидим грозное «Access forbidden!» — доступ запрещён.

Теперь скопируем с site1 файл index.php и в .htaccess укажем этот файл в качестве индексного:

Options -Indexes
DirectoryIndex index.php

Обновим страницу и видим «Привет, index!».

Таким образом эти две директивы являются минимально необходимыми для любого каталога на сервере. Если вы размещаете на сервере какие-то файлы, то не поленитесь и закрыть каталог от просмотра.

Задания

1. Прочитать про IP-адреса и что такое localhost на википедии.

2. Удалите site2. В site1 оставьте только .htaccess и index.php. Подредактируйте .htaccess, так чтобы по основному адресу сайта отображался файл index.php.