Основной конфигурационный файл Apache в Ubuntu 16.04 и новее находится по адресу:
/etc/apache2/apache2.conf
Установки, определенные в нем, могут быть перезаписаны в файлах .htaccess. Влияние каждого .htaccess распространяется на ту папку, в которой он находится и на все вложенные в нее папки. При этом, если во вложенной папке будет свой .htaccess, он будет иметь преимущество перед расположенным выше.
Синтаксис apache.conf и .htaccess.
Сразу скажу, что синтаксис этих двух документов идентичен.
Чтобы открыть apache.conf для редактирования, воспользуйтесь командой:
Если вам не нравится gedit, замените его любым другим текстовым редактором (например, nano). Можно обойтись без sudo, но в этом случае вы, скорее всего, сможете только просматривать содержимое файла, но не изменять его.
Внутри находится набор директив, каждая из которых отвечает за определенный параметр. Например, присутствующая на снимке LogLevel warn означает следующее: сохранять в лог все сообщения сервера, соответствующие уровню «предупреждение» и более серьезные. Слева всегда располагается название директивы, справа — ее значение. Кстати, расположение файла, в котором хранится лог ошибок, определяет директива ErrorLog.
Не лишним будет определить директиву ServerName. Стандартное значение — 127.0.0.1.
Директивы могут занимать несколько строк, в этом случае их называют блочными. Рассмотрим для примера директиву Directory:
Между символами «<» и «>» располагается название директивы, а при необходимости — еще и параметр, уточняющий ее действие. В данном случае — название каталога, к которому относится содержимое. Конец блочной директивы обозначается так же, как начало, однако перед названием ставится слеш (/). Содержимое, располагающееся между открывающим и закрывающим тегами, представляет собой такие же директивы, как те, о которых шла речь выше.
Давайте выясним, что они означают.
AllowOverride None запрещает использование файлов .htaccess в данной директории. Чтобы разрешить перезаписывать любые параметры, замените None на All. Вы также можете указать группы настроек, разрешенных к перезаписи. Например, чтобы разрешить только те директивы из .htaccess, которые меняют режим доступа, следует указать AllowOverride AuthConfig.
Require all granted разрешает доступ к директории для всех без исключений. В более ранних версиях Apache применялся другой вариант — Allow from all, имеющий то же значение.
Как запретить или ограничить доступ к директории?
Начиная с версии Apache 2.4 для регулирования доступа к директории используется директива Require. Она может располагаться как в глобальном файле настроек, так и в любом .htaccess. Раньше те же функции выполняли Order, Allow и Deny.
Итак, для того чтобы полностью запретить доступ, воспользуйтесь такой конструкцией:
Require all denied
Полностью запретить доступ надоедливому или регулярно вредящему пользователю можно таким образом:
Require not ip 123.456.789.012
подставив его ip вместо чисел.
Если убрать из этой конструкции not, доступ будет разрешен только с указанного ip. Можно также указать имя разрешенного или запрещенного хоста, указав вместо ip host.
Эти правила могут находиться внутри блочных директив <RequireAll>
, <RequireAny>
и <RequireNone>, которые разрешается вкладывать друг в друга для построения сложных правил доступа. Подробнее об этом читайте в документации Apache.
После сохранения файла не лишним будет проверить его синтаксис — вдруг в процессе редактирования мы допустили ошибку или сделали опечатку? Для этого введем команду:
При обнаружении ошибки будут указаны сведения о ней.
Чтобы изменения, внесенные в конфигурационные файлы, подействовали, необходимо перезапустить веб-сервер командой
P.S.
В следующих статьях я продолжу рассказывать о связке LAMP.
Если вы хотите прочесть о каком-то конкретном аспекте этой темы, напишите в комментариях.