Создание сайта. Часть 5: Apache

версия для печати

Продолжаем тему сайтостроя. Чем дальше, тем сложнее :) Полное содержание серии - в конце статьи.

Напоминаю, Apache – это веб-сервер. Он слушает определенные порты, и получив корректный запрос посылает контент просящему. Это очень общее описание работы мощной программы. За всеми подробностями – в инет. Могу добавить по минимуму следующее: http-протокол работает по 80-ому порту, так принято по умолчанию. Вот его веб-сервер и слушает. Могут использоваться другие порты для передачи http-трафика, их обычно настраивают для работы с прокси-серверами.

Прежде чем грузить вас техническими дебрями веб-сервера, стоит упомянуть о таких переходных решениях, как Денвер и XAMPP. К сказанному в Википедии добавить почти нечего. Скачали, поставили - пользуемся. Ничего сложного. Готовые пакеты - это неплохо, но я считаю эти решения переходными, потому как нормальный веб-мастер должен уметь сам разворачивать окружение и управлять им. Это мое мнение.

Обратно к теме. Apache изначально написан под Linux и на Windows мы имеем портированное приложение. Поэтому все его настройки описаны в текстовых conf-файлах, а не в реестре. И тут мы как бы плавно переходим к вопросу, какой дистрибутив Apache качать. По логике, нужна та же версия, что и вашего хостера, чтобы не было потом вопросов, почему не так работает сервер. Но "порты" делаются с задержкой после выхода новой версии, поэтому найдите на странице знакомое слово "Windows" и скачайте что-нибудь :)

Предположим, скачать и установить Apache вам удалось. У сервера множество настроек, которые описаны в нескольких конфигурационных файлах. Обычно всеми настройками за пределами сайта ведает хостер, а внутри сайта – админ сайта.

Настройки сервера

Если вы поднимаете свой веб-сервер (заботы хостера), вам следует изучить тему, как настроить Apache для этой работы. В статье возьмем простой вариант разработки сайта на локальной машине (localhost), т.е. веб-сервер и сайт у вас на одном компе, работать с сайтом вы будете тоже на нем. Тогда настройка для сайта в Apache будет выглядеть так:

Конфиг [..\Apache2.2\conf\extra\httpd-vhosts.conf]

<VirtualHost 127.0.0.1:80>
    ServerName localhost
    DocumentRoot d:/web/site
       
    <Directory d:/web/site>
         #  Выдавать содержимое каталога, если нет главной страницы
         Options Indexes
         #  Разрешено переписывать все настройки родительских каталогов
         AllowOverride all
         #  Разрешить всем доступ к каталогу 
         Allow from all
    </Directory>
</VirtualHost>

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

После внесения изменений нужно перезапустить сервер. Под Видной это делается либо через консоль управления Службами либо через маленькую программулину ApacheMonitor, которая идет в пакете с сервером. Если сервак не запустится, значит скорее всего ошибка в конфиге, посмотрите логи в [..\Apache2.2\logs\].

Если все правильно, то через браузер обращаемся на http://localhost и получаем главную страницу сайта из каталога [d:\web\site] или содержимое этого каталога, если страницы нет.

Если вы хотите указать отличное от localhost имя сайта, например "site.ru", тогда в Виндовском hosts пропишите соответствие "127.0.0.1 site.ru". Таким образом все обращения браузера к "site.ru" пойдут на "местный" адрес (127.0.0.1 – это служебный адрес сетевой карты на любом компе). Поднятый на компе веб-сервер получит запрос и ответит браузеру. Если вы здесь ничего не поняли, то либо в инет за ликбезом либо просто сделайте так, как указано во вставке, и ходите на localhost.

Видите разницу: DNS-имя сайта - "localhost", хотя каталог сайта "site"? Разберитесь самостоятельно, что к чему, или почитайте в статье "О доменах и сайтах. Виртуальный хостинг". Это все, что я могу сказать вам о настройке веб-сервера за пределами сайта. Более подробно о настройках ядра Apache читайте здесь и на просторах интернета.

Настройки сайта

Настройки каталогов сайта описываются в .htaccess. Родительский .htaccess распространяется на вложенные каталоги. Т.о. чтобы отменить какую-то настройку родителя, нужно создать свой .htaccess в каталоге и описать в нем новое значение. Главным файлом настроек считается .htaccess в корне сайта. При обращении к какому-либо каталогу, Apache ищет в нем файл настроек или читает родительский. Внесенные изменения применяются сразу, сервер/браузер перезапускать не надо.

Некоторые настройки сайта:

DirectoryIndex index.php index.htm index.shtml handler.php?page=main

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

AddHandler application/x-httpd-php .htm .html

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

Другой пример:

AddType text/html .shtm .shtml
AddHandler server-parsed .shtm .shtml

Первая директива связывает расширение файла с MIME-типом, вторая назначает обработчик для таких файлов. Помните, раньше была описана сборка страницы чере SSI? Вот эти директивы указывают веб-серверу, что с таким файлами делать.

Options +/-Indexes

Можно/нельзя выдать содержимое каталога, если нет главной страницы. Пишется либо "+" либо "-". Эту опцию можно задать в настойках ядра Apache. И если разрешена ее перезапись (директива AllowOverride, см. выше), то значение опции можно так же задавать в настройках сайта. Чтобы не гадать, что задано в настройках ядра, лучше явно ее описывать в настройках сайта.

Options Includes

C этой опцией вы уже знакомы, разрешаем включения на стороне сервера (SSI) посредством mod_include. Допускается запись опций в одной строке, типа: "Options -Indexes Includes"

ErrorDocument NN URL
Примеры:
ErrorDocument 401 /errors/handler.php?er=401
ErrorDocument 403 /errors/handler.php?er=403
ErrorDocument 404 /errors/handler.php?er=404
ErrorDocument 500 /errors/handler.php?er=500

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

Пароль на каталог. Защита админки

Админский каталог должен быть защищен обязательной аутентификацией. Запрос пароля можно намутить через скрипт с выдачей в браузер или просто использовать HTTP-аутентификацию средствами веб-сервера. Для этого в защищаемом каталоге создаем свой .htaccess:

AuthType Basic
AuthUserFile D:\web\Site\.password
AuthName "Доступ ограничен. Введите пароль"
# разрешен доступ всем прошедшим проверку
require valid-user
# Доступ конкретным пользователям
# require user0 user1 AdMinKo

Собственно пояснять тут нечего, последняя строка закоментирована, это пример. Другой вопрос, как создать сам файл пароля, .password. Кстати, имя файла может быть любым. Через консоль Windows запустите файл [..\Apache2.2\bin\ htpasswd.exe]. Запуск без параметров выдаст инструкцию по применению :-)

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

Для усиления защиты можно разрешить доступ в админку только с определенных адресов. Аналогично можно закрыть доступ на весь сайт или его часть из определенных стран, подсетей и т.п. Пример:

<Files admin.php>
 Order Deny,Allow
    Deny from all
   # доступ разрешен для двух ip-адресов
   Allow from 192.168.1.104 192.168.1.205
  # доступ разрешен из подсети
    Allow from 10.1.2
</Files>

Всем, кого нет в списке, сервер ответит "403 Forbidden". Практический плюс: такой подход позволит снизить нагрузку на сервер во время брутфорсной атаки на пароль админа. Минус защиты в том, что у вас должен быть белый (постоянный) ip-ник, иначе при каждой смене адреса придется лазить в файл конфига. Еще следует учесть, что ваш реальный ip-адрес может быть скрыт за NAT, следовательно разрешение будет дано любой машине за тем же NAT. Но это все равно лучше, чем ничего.

Бонус

Есть некоторые тонкости в настройках сайта. Вы знаете, что главный .htaccess распространяется на вложенные каталоги. Допустим в нем описано:

DirectoryIndex index.php
Options -Indexes

Что дает следующее: попытка зайти через браузер во вложенный каталог, например [../images], закончится ошибкой "403: Доступ запрещен". Во вложенном каталоге нет ни своего .htaccess, ни index.php, а чтение каталога запрещено "-Indexes".

Если переписать директиву на "DirectoryIndex /index.php", тогда обращение к любому каталогу будет перенаправляться на главный index.php. Это решает проблему с подкаталогами и ошибкой 403, но тогда игнорируются индексные страницы во всех подкаталогах. К примеру, админка может иметь свой index.php но вы его не увидите. Выход, в главном .htaccess описать:

DirectoryIndex index.php /

Слеш в конце – это указание искать индексную страницу на уровень выше. Тогда если каталог не имеет своей главной страницы, в браузер будет выдана страница родителя.. или родителя родителя %) Короче, ближайший index.php. Конечно, можно так не заморачиваться, пусть юзер видит "403: Forbidden", если залез не туда, и пусть логи забиваются ненужной информацией. Дело ваше :)

Еще бонус

Записью типа:

<Files .password>
   deny from all
</Files>
(конфиг в том же каталоге, где и файл)

можно запретить обращение через бродилку к указанному файлу. Где это использовать, решайте сами. Скажу лишь, что в настройках веб-сервера скорее всего запрещен доступ к любым . htaccess, но вдруг ваш хостер – раздолбай? Делайте выводы :)

Бонус 3

Где-то в 10.x версиях Оперы был глюк – браузер по ссылке открывал rar-файл, выдавая крякозяблы, вместо того, чтобы загрузить его на диск. Это лечилось настройкой браузера со стороны пользователя, но есть и другой вариант, "админский":

# настройка принудительного сохранения файлов, которые не должны открываться в браузере
AddType application/octet-stream .rar .avi .pdf

Можно дописать свои расширения. Я экспериментировал в Opera 11.0 с расширением jpg - не сработало, а FF18 принял указание корректно. Вывод: использовать на свой страх и риск ;)

[1oo%, EoF]
Остальные статьи серии:
1. Идея
2. Работаем над дизайном
3. HTML, CSS
4. Как работает интернет
5. Apache
6. JavaScript
7. PHP
8. MySQL
9. cookie и сессии
10. mod_rewrite

Понравилась статья? Расскажите о ней друзьям:


Комментарии
Для работы модуля комментариев включите javaScript


Показать/скрыть правила
Имя
[i] [b] [u] [s] [url]
:-) ;-) :D *lol* 8-) :-* :-| :-( *cry* :o :-? *unsure* *oops* :-x *shocked* *zzz* :P *evil*

Осталось 1000 символов.
Код защиты от спама Обновить код
Каждый комментарий проходит ручную модерацию. 100% фильтрация спама.
Продвижение
Время
Метки