Уявіть, що ви замовили віртуальний хостинг * для свого веб-сайту. Всі послуги активовані, ви отримали реквізити для ftp-доступу *, що робити далі? Якщо ваш веб-сайт являє собою набір статичних html-сторінок, залишається тільки залити їх на наданий сервер, після чого веб-сайт стане доступний усім бажаючим. Але, крім статичних html-сторінок, у вас можуть бути і динамічні скрипти, які бажано замаскувати, щоб не псувати адресний рядок браузера відвідувача посиланнями видуhttp://www.pupkin.com/cgi-bin/super-script. cgi? action = list & mode = 4. Або, може бути, ви бажаєте обмежити доступ до певних частин веб-сайту, яким нестандартним чином оформити посилальну інфраструктуру, подбати про зручність тих, хто буде часто відвідувати ваш веб-сайт? У всіх цих випадках вам необхідна додаткова конфігурація веб-сервера *.

Користувач розпорядженні певним набором директив веб-сервера, за допомогою яких він може провести додаткову настройку свого веб-сайтаВероятнее все, сервер фірми, яка надала вам віртуальний хостинг, буде працювати під управлінням однієї з численного сімейства * nix-систем. У цьому випадку на ньому напевно буде встановлений широко поширений веб-серверApache - про його конфігурації і піде мова в даній статті. Настройкою веб-сервера на хостингу займаються системні адміністратори, які мають необхідні знання та досвід. В той же час кожен окремий користувач розпорядженні певним набором директив, за допомогою яких він може провести додаткову настройку саме свого веб-сайту, не зачіпаючи при цьому інтереси інших клієнтів. Здійснюється це дуже просто: у будь-якому каталозі вашого веб-сайту може знаходитися файл з ім'ям. Htaccess(зверніть увагу на крапку на початку імені файлу), в який записуються директивиApache, впливають на властивості даного каталогу і всіх його підкаталогів.

У даній статті коротко описуються лише найбільш популярні директиви конфігурації вашого веб-сайту, за повним же переліком усіх допустимих директив краще звернутися до документацііпо веб-серверуApache. Деякі з наведених нижче директив вимагають певних налаштувань самого веб-сервера, тому, якщо якісь з директив не працюють, не соромтеся звертатися до служби технічної підтримки вашого хостера.

Дія директив, описаних у файлі. Htaccess, зазвичай поширюється на весь каталог, в якому розташований даний файл, а також на всі його підкаталоги. Однак при необхідності можна виділити окрему групу файлів, до яких будуть ставитися задані налаштування, за допомогою директивиFilesMatch, в якій вказується регулярний вираз. Наприклад:


# директиви, що відносяться тільки до файлів з розширеннями gif, jpg і jpeg
...
# все, що розташоване після символу '#', вважається коментарем

У регулярному виразі можна використовувати будь-які друковані символи і пробіл, але частина символів має особливе значення:

  • Круглі дужки()використовуються для виділення груп символів.
  • Символ^позначає початок рядка.
  • Символ$позначає кінець рядка.
  • Символ.позначає будь-який символ.
  • Символ|позначає альтернативу. Наприклад, вирази "A | B" і "(ABC | DEF)" означають "A або B" і "ABC або DEF"відповідно.
  • Символ?ставиться після символу (або групи символів), який може як бути присутнім, так і бути відсутнім. Наприклад, висловом "jpe? G" підійде і рядок "jpg", і рядок "jpeg". Приклад вираження з групою символів: "super-(puper-)? Site".
  • Символ*ставиться після символу (або групи символів), який може бути відсутнім або бути присутнім необмежене число разів поспіль. Наприклад, висловом "jpe * g" підійдуть рядки "jpg", "jpeg" і "jpeeeeeeg".
  • Символ+діє аналогічно символу*з тією лише різницею, що передує йому символ обов'язково повинен бути присутнім хоча б один раз. Наприклад, висловом "jpe + g" підійдуть рядки "jpeg" і "jpeeeeg", але не "jpg".
  • Квадратні дужки[]використовуються для перерахування допустимих символів. Наприклад, вираз "[abc]" рівносильно висловом "a | b | c", але варіант з квадратними дужками зазвичай є більш оптимальним за швидкодією. Усередині дужок можна використовувати діапазони: наприклад, вираз "[0-9]" рівносильно висловом "[0123456789]". Якщо символи всередині квадратних дужок починаються з символу^, це означає будь-який символ, крім перерахованих в дужках. Наприклад, вираз "[^ 0-9] +" означає рядок з будь-яких символів, окрім цифр.
  • Символ\ставиться перед спецсимволами, якщо вони потрібні у своєму первозданному вигляді. Наприклад, висловом "jpe \ + g" відповідає тільки один рядок "jpe + g".

Директива ErrorDocument дозволяє замість стандартних повідомлень про помилки видавати спеціальні сторіночки, виконані в дизайні веб-сайтуВ середовищі веб-дизайнерів вважається хорошим тоном замість стандартних повідомлень про помилки видавати спеціальні сторіночки, виконані в дизайні веб-сайту. Для цього служить директиваErrorDocument, яка дозволяє для будь-якого існуючого коду помилки задати або веб-сторінку, або альтернативне текстове повідомлення. Наприклад:

# в разі помилки "SERVER ERROR" показується сторінка з іншого веб-сайту
ErrorDocument 500 http://foo.example.com/cgi-bin/tester
# в разі помилки "NOT FOUND" показується сторінка з того ж веб-сайту
ErrorDocument 404/cgi-bin/bad_urls.pl
# в разі помилки "FORBIDDEN" показується текстове повідомлення, яке обов'язково має починатися з лапки (лапки в повідомленні не виводиться)
ErrorDocument 403 "Sorry can't allow you access today

ДирективаOptionsдозволяє задати ряд загальних параметрів, з яких найбільш популярні наступні:ExecCGI(дозволити виконання CGI-скриптів *),FollowSymLinks(обробляти сімлінкі),Includes(дозволити SSI *),IncludesNOEXEC( дозволити SSI без запуску скриптів),Indexes(показувати відвідувачу список файлів, якщо у вибраному каталозі немає файлуindex.htmlабо його аналога).

Параметри записуються через пробіл і можуть мати в початку знаки+або-, які управляють спадкуванням. Наприклад:

# включає тільки параметр Includes
Options Includes
# включає параметр Includes і вимикає параметр Indexes, а всі інші параметри мають значення, задані в глобальних установках веб-сервера
Options + Includes-Indexes

Коли відвідувач запитує посилання на каталог (наприклад,http://pupkin .com/docs/), і такий каталог існує, то веб-сервер віддає з даного каталогу файлindex.html, а при його відсутності - або вміст каталогу (якщо включена опціяIndexes), або помилку 403 (FORBIDDEN). Якщо ваш веб-сайт побудований на скриптах, то в якості індексних можуть використовуватися файли з іншими розширеннями - вказати ці файли можна за допомогою директивиDirectoryIndex. Наприклад:

DirectoryIndex index.html index.shtml index.pl index.cgi

Якщо вашим динамічним скриптам потрібні якісь особливі змінні оточення (environment), їх можна задати при допомоги наступних директив:PassEnv(передати скриптам дану змінну оточення),SetEnv(встановити змінну оточення),UnsetEnv(зняти змінну оточення). Перед застосуванням цих директив краще проконсультуватися зі службою технічної підтримки - дуже ймовірно, що вони не будуть вам доступні з міркувань безпеки. Приклади:

# передати скриптам значення змінної оточення LANG
PassEnv LANG
# задати змінну оточення PERL5LIB
SetEnv PERL5LIB/home/pupkin/lib/perl

Цілком може трапитися так, що ваші динамічні скрипти будуть мати нестандартні розширення - в цьому випадку вам може знадобитися директиваAddHandler. Наприклад, якщо ваші скрипти написані на perl, то не завадить додати в. htaccessнаступні рядки:

Options + ExecCGI
AddHandler cgi-script. pl

За допомогою системи паролів можна обмежити доступ до певних частин веб-сайтаДопустім, що ви бажаєте обмежити доступ до певної частини вашого веб-сайту - це можна легко організувати за допомогою системи паролів. Якщо відвідувач спробує зайти в закриту частину веб-сайту , то його браузер відкриє вікно, в якому відвідувач повинен буде ввести свої логін і пароль. Настройка системи паролів полягає в наступному: в окремий текстовий файл за допомогою утилітиhtpasswd, що входить до складуApache, записуються потрібні логіни і паролі, після чого можна обмежити доступ до будь-якої частини веб-сайту за допомогою наступних директив:

# назва області обмеженого доступу
AuthName "Top secret"
# тип авторизації (можливі тільки два варіанти: Basic і Digest, але другий може не підтримуватися деякими браузерами, тому користуватися їм не рекомендується)
AuthType Basic
# ім'я файлу з логінами і паролями (бажано помістити цей файл поза ієрархії вашого веб-сайту )
AuthUserFile/home/pupkin/.www-users
# дозвіл доступу тільки тим користувачам, хто введе правильний логін і пароль
Require valid-user
# інший варіант директиви Require: дозвіл доступу тільки перерахованим користувачам
# Require user ivanoff petroff

Користувачів можна об'єднувати в групи, що дозволяє обмежувати доступ на більш високому рівні. Синтаксис файлу з описом груп дуже простий:

# група: логін1 логін2
masters: pupkin
losers: ivanoff petroff sidoroff

Обмеження доступу на базі групи задається приблизно так (додаємо директивуAuthGroupFileі змінюємо директивуRequire):

AuthName "Top secret"
AuthType Basic
AuthUserFile/home/pupkin/.www-users
AuthGroupFile/home/pupkin/.www-groups
Require group masters

З метою безпеки рекомендується організовувати доступ до закритих областям веб-сайту через захищене SSL-соедіненіеСледует пам'ятати, що при такому обмеженні доступу паролі передаються по каналах зв'язку у відкритому вигляді і можуть бути перехоплені зловмисниками. Тому з метою безпеки рекомендується організовувати доступ до закритих областям веб-сайту через захищене SSL-з'єднання *.

Якщо вас хвилює доля частих відвідувачів вашого веб-сайту, що використовують повільні канали зв'язку, можна трохи полегшити їм життя за допомогою директивExpiresActive,ExpiresDefaultіExpiresByType(але не забудьте попередньо з'ясувати в службі технічної підтримки, чи входить до складу вашого веб-сервера модульmod_expires). Ідея даного підходу полягає в наступному: якщо на вашому веб-сайті є об'єкти, які змінюються дуже рідко (зазвичай це зображення), то можна настроїтиApacheтаким чином, щоб разом з цими об'єктами він віддавав http-заголовокexpires. В такому випадку після завантаження зображення воно зберігається в кеші браузера відвідувача і буде перебувати в ньому аж до настання зазначеного у http-заголовку часу. Приклади:

# включити установку http-заголовків expires
ExpiresActive on
# за замовчуванням для всіх елементів встановлюється дата на 1 день пізніше часу запиту
# ExpiresDefault "access plus 1 days"
# альтернативна запис, різниця в часі вказується в секундах (86400 секунд дорівнюють одному дню)
# ExpiresDefault A86400
# можна відраховувати час від моменту останньої зміни запитуваної об'єкта
# ExpiresDefault "modification plus 1 weeks"
# ExpiresDefault M604800
# можна задавати час окремо для різних типів об'єктів
# для html-сторінок
ExpiresByType text/html "access plus 10 minutes"
# для текстових файлів
ExpiresByType text/plain "access plus 10 minutes"
# для зображень
ExpiresByType image/gif "modification plus 1 days"
ExpiresByType image/jpeg "modification plus 1 days"

Ну, і наостанок варто згадати директивуAddDefaultCharset, в якій вказується кодування вашого веб-сайту. Відсутність цієї директиви або неправильне зазначення кодування призведе до того, що деяким відвідувачам доведеться задавати кодування уручну в своїх браузерах, а це їм навряд чи сподобається. Приклад:

AddDefaultCharset windows-1251

Як ви, напевно, вже помітили, в даному описі не були порушені директиви для налаштування редиректів і перетворень http-посилань (Redirect,RedirectMatch,RewriteEngine,RewriteRule,RewriteCond). Справа в тому, що ці директиви застосовуються настільки часто і володіють настільки широкими можливостями, що про них слід написати окрему статтю.

Посилання по темі

  • Apache HTTP Server Project
  • Apache HTTP Server Version 1.3 Documentation

Статьяполучена: hostinfo.ru

Детальніше »