Веб-сервер Apache и его использование хостинг-провайдерами

27 Февраля 2016
1 391

Завоевав невероятную популярность еще в 1996 году, веб-сервер Apache и по сей день является одним из самых распространенных решений для хостинга. По данным британского аналитического агентства Netcraft, его доля на рынке в 2015 году составила почти 51%, что, по сути, является абсолютной монополией. Столь оглушительный успех объясняется целым рядом факторов, но главный из них - гибкость. Сервер поддерживает подключение внешних модулей, работу с различными интерпретаторами языков программирования и базами данных, что делает его поистине универсальным и позволяет работать с любыми типами веб-приложений.


Немаловажной является и поддержка стандарта hypertext access. Благодаря ей, каждый пользователь, даже не имеющий административных прав, может изменять настройки сервера Apache, внося необходимые директивы в дополнительный конфигурационный файл (.htaccess), расположенный в корневом каталоге размещенного сайта. В этой статье рассмотрены базовые приемы, которые следует взять на вооружение любому владельцу собственного интернет-ресурса.

Задаем индексный файл

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


Когда пользователь переходит по ссылке site-name.ru, он попадает в корневой каталог проекта. При этом происходит загрузка индексного файла, представляющего собой главную страницу сайта. В том случае, если таковой отсутствует в директории, веб-сервер Apache возвращает ошибку 403 (Forbidden, отказано в доступе).


Какой именно файл считать индексным, определяет директива DirectoryIndex. В большинстве случаев, в ней перечислены следующие варианты: index.php, index.html и index.htm. Но что делать, если Вы используете CMS, написанную, к примеру, на Python? Тогда можно указать индексный файл самостоятельно, добавив в .htaccess всего одну строчку. Для index.py она будет выглядеть следующим образом:


DirectoryIndex index.py


При необходимости, можно задать сразу несколько индексных файлов, перечислив их через запятую. Apache будет последовательно проверять их наличие в папке и выводить первый найденный:

DirectoryIndex index.py, index.php, index.html

Устанавливаем собственные страницы ошибок

Htaccess позволяет задавать собственные страницы ошибок в виде статичных документов. Эта опция весьма полезна, так как позволяет скрыть от злоумышленников версию CMS (в том случае, если страница генерируется на уровне движка), или сервера. Для этого можно воспользоваться следующим шаблоном:


ErrorDocument код_ошибки /каталог/страница_ошибки.html

Так, для самой известной ошибки “404 страница не найдена”, директива будет такой:

ErrorDocument 404 /errors/404.html

Управляем кодировкой

Довольно часто при работе с CMS можно столкнуться с проблемой отображения текстовой информации. Как правило, это происходит из-за ошибок в кодировке. Htaccess позволяет принудительно переопределить ее значение:

AddType "text/html; charset=utf-8" .html .htm


В примере выше мы дали понять Apache, что все документы с расширением .html и .htm необходимо отдавать в кодировке UTF-8.

Боремся с воровством контента

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


Данный термин обозначает не просто копирование контента, а его “встраивание” в код другого веб-ресурса. Таким образом воруют различные изображения. При этом, каждый раз, когда посетитель заходит на страницу, где размещен хотлинк, картинка подгружается с Вашего сайта, создавая дополнительную нагрузку и расходуя трафик. Однако, внеся изменения в настройки сервера Apache с помощью htaccess, это легко предотвратить. Метод основан на проверке переменной HTTP_REFERER. В случае выявления ее подмены, вместо запрашиваемого изображения будет выводиться любое другое, например, Ваш логотип:

<IfModule mod_rewrite.c>


Включаем проверку HTTP_REFERER

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?site-name\.ru/ [NC]


Меняем запрошенный файл на картинку с логотипом Вашего проекта

RewriteCond %{REQUEST_URI} !logo.jpg$ [NC]
RewriteRule .(jpg|jpeg|gif|bmp|png)$ http://site-name.ru/logo.jpg [L]
</IfModule>


Другая напасть - отображение информации с Вашей площадки на другом сайте посредством тега <iframe>. С его помощью можно воровать даже видео, поэтому такую возможность обязательно следует заблокировать:

<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>


Здесь мы прописали запрет в заголовок, отдаваемый сервером. SAMEORIGIN означает, что использование <iframe> возможно только в пределах оригинального ресурса.

Оптимизируем работу сайта

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


Для начала, стоит разобраться с мультимедийными файлами и документами, которые практически никогда не меняются:

<ifModule mod_headers.c>


Перечисляем расширения файлов, которые хотели бы закэшироовать

<FilesMatch ".(gif|jpg|jpeg|png|ico|swf|flv|pdf|doc|docx|odf)$">


Устанавливаем время хранения кэша полгода (в секундах)

Header set Cache-Control "max-age=14515200, private"
</FilesMatch>
</IfModule>


Кэшировать таблицы стилей и JavaScript следует на менее продолжительное время:

<ifModule mod_headers.c>
<FilesMatch ".(js|css)$">


Время жизни кэша составляет 1 день (также в секундах)

Header set Cache-Control "max-age=86400, private"
</FilesMatch>
</IfModule>


Динамические скрипты лучше вообще исключить из кэша во избежание ошибок при обновлении страниц:

<ifModule mod_headers.c>
<FilesMatch ".(php|cgi|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>


Выберите хостинг с надежной технической поддержкой.