Робота з web-сервером russian apache
Робота з Web-сервером Russian Apache
Історично склалося так, що українські тексти в Internet можуть бути представлені в різних кодуваннях, з яких найбільш поширені koi8-r (або просто koi8) і Windows-1251: з першої працює більшість серверів і робочих станцій під управлінням Unix, друга є стандартною для всіх версій Windows. Оскільки кодування Windows-1251, природно, застосовується на переважній більшості клієнтських машин, частка тих, хто подорожує по російській частині WWW, використовуючи koi8, не перевищує зараз 5%. Однак в цьому кодуванні зберігаються документи на багатьох Unix-серверах, в ній найчастіше передаються поштові повідомлення і практично завжди - листи в телеконференції, з нею ж працюють багато російськомовних канали IRC (до речі, абревіатура ЯКІ розшифровується як "код обміну інформацією"). Щоб вирішити проблеми, що виникають при розбіжності кодувань тексту на сервері і клієнтської машині, і був створений український модуль Apache-RUS для Web-сервера Apache.
У статті ми розглянемо процес установки і настройки як самого сервера, так і механізму перекодування документів "на льоту".
Отже, в першу чергу ми переписуємо на свою машину архів (менше 1,5 Мбайт) і розпаковуємо його:
# Ftp ftp://apache.lexa.ru/pub/apache-rus/ apache_1.3.3rusPL27.3.tar.gz
# Tar xvzf apache_1.3.3rusPL27.3.tar.gz
Після цього входимо в створений при розпакуванні каталог apache_1.3.3rusPL27.3 і запускаємо сценарій configure:
При необхідності сценарієм можна в явній формі вказати аргументи (їх список видається по команді configure -help). Так, якщо потрібно встановити сервер в іншій каталог, ніж стандартний, потрібно виконати "configure -prefix =
Коли configure відпрацює, слід, як зазвичай, дати команди make і make install (ці дії виконуються користувачем root).
Тепер сервер встановлений в каталозі / usr / local / apache, але запускати його поки не можна - спочатку ми повинні відредагувати файли настройки httpd.conf, access.conf і srm.conf в каталозі / usr / local / apache / etc / (починаючи з версії 27.4 - / usr / local / apache / conf).
Налаштування конфігураційних файлів Web-сервера - найвідповідальніший крок при його установці. Тут ми розглянемо тільки найбільш поширені директиви і їх параметри, оскільки повний перелік з описом займе не один десяток сторінок. Сервер перечитує конфігураційні файли при запуску, а також при отриманні сигналу -HUP (жорсткий рестарт) або -uSR1 (м'який рестарт). Якщо сервер знаходиться в робочому стані, то при зміні конфігурації його рекомендується перезапустити командою
# Kill -USR1 `cat / usr / local / apache / logs / httpd.pid`
В цьому випадку наявні з'єднання не зачиняються примусово і завершуються звичайним чином, а наступні клієнти працюють вже з новими файлами.
У access.conf містяться директиви, що описують права доступу до каталогів і файлів Web-сервера. Перш за все вирішите, в якому каталозі будуть зберігатися документи. За замовчуванням це / usr / local / apache / share / htdocs, однак багато адміністраторів вважають за краще розміщувати документи починаючи з каталогу / www /<имя_сервера>/, Оскільки при такій організації простіше орієнтуватися в структурі файлів. Нехай, наприклад, ми створили каталоги:
Вони будуть кореневими для відповідних віртуальних серверів.
Файл access.conf може містити секції Directory, Location і Files, які обмежені однойменними директивами. В параметрах цих директив можуть використовуватися символи "?" і "*". а також регулярні вирази, які супроводжуються тильдой, наприклад "^ / Www. + / A? Server">. У секції Directory поміщаються інструкції, пов'язані з якогось каталогу на диску, в секції Location - пов'язані з віртуального шляху, в секції Files - асоційовані з файлом або групи файлів. # Директиви, які стосуються усіх документів, що зберігаються в каталозі /www/rmt.ru і вкладених в нього
# Директиви, які стосуються усіх документів, доступним за
# Директиви, які стосуються файлу form.html з каталогу
Різниця між секціями Directory і Location полягає в тому, що перша відноситься до каталогів на диску, друга - до віртуального шляху (URL), який браузер запитує у Web-сервера. І в тій, і в іншій можуть бути присутніми директиви order, allow і deny, які дозволяють обмежити доступ до каталогу або URL з різних машин.
Наступні дві директиви відносяться до секції
Можливі значення параметрів:
ExecCGI - дозволити виконання CGI-сценаріїв в даному каталозі і його поддереве;
Includes - дозволити SSI (Server Side Includes);
Indexes - дозволити видачу лістингу каталогу, якщо в ньому немає файлу index.html (або файлу індексу, заданого директивою DirectoryIndex);
MultiViews - дозволити підтримку багатьох мов; за замовчуванням вона відключена, і включати її, як правило, не потрібно; підтримка перекодування "на льоту" для української мови встановлюється за допомогою інших директив, які ми розглянемо пізніше;
All - встановити відразу всі перераховані режими крім MultiViews.
При відсутності спеціальних вимог до безпеки цілком допустимо вказати "Options All" в секції
Більшість директив можуть задаватися не тільки в конфігураційних файлах сервера, але і в файлах .htaccess в каталогах сервера. Директива AllowOverride визначає набір директив, допустимих в файлах .htaccess. Параметри можуть бути вказані такі:
FileInfo - дозволити директиви, які відповідають за типи документів;
Indexes - дозволити директиви, пов'язані з лістингом каталогів;
Options - дозволити описану вище директиву Options.
Врахуйте, що при включенні останнього режиму користувачі отримують можливість створювати власні файли .htaccess і вирішувати в них виконання CGI-сценаріїв. Тому якщо потрібно контролювати CGI-сценарії користувачів, не слід поширювати на призначені для користувача каталоги відповідають вимогам Директиви ЄС AllowOverride Options.
Однак у багатьох випадках (зокрема, коли права на зміну вмісту сервера є тільки у адміністратора) файл access.conf може виглядати так, як в лістингу 1.
Файл srm.conf містить директиви, пов'язані із загальними настройками структури каталогів сервера. Як правило, в ньому досить змінити лише кілька рядків.
DocumentRoot <первый каталог сервера>
UserDir <имя пользовательского каталога>
<имя_пользователя>/. Стандартно public_html. Іноді, щоб полегшити життя користувачам, адміністратори дають директиву "UserDir www".
DirectoryIndex <список файлов индекса>
Файл індексу - це той файл, який буде переданий клієнту при зверненні до каталогу. Якщо вказати кілька імен, сервер буде шукати потрібний файл "зліва направо". За замовчуванням список містить всього одне ім'я - index.html, але прийнято додавати в нього й інші поширені імена індексних файлів. Наприклад, директива може мати вигляд: DirectoryIndex .index.html index.html index.htm index.cgi index.shtml home.html home.htm default htm default html
B кореневому каталозі кожного віртуального сервера створюємо файл missing.html. Рекомендується дати в ньому посилання на основні розділи сервера - і для зручності користувачів, і для того, щоб надати необхідну інформацію пошуковим роботам, індексуються сервери.
Конфігураційний файл httpd.conf є основним і містить настройки, пов'язані з роботою Web-сервера, віртуальних серверів, а також всіх його програмних модулів. Крім того, саме в ньому налаштовується перекодування українських букв при передачі від сервера до клієнта і назад.
Директива Port, вміщена в самому початку файлу, визначає номер порту для http-сервера; за замовчуванням це 80. При необхідності можна приписати сервера інший порт або кілька портів, для чого служить директива Listen.
Директиви User і Group задають користувача, який буде адмініструвати сервер. З точки зору безпеки небажано вказувати тут існуючого користувача, що має доступ до будь-яких інших ресурсів або файлів. Краще створити окремого користувача і групу спеціально для http-сервера, наприклад:
Директиви ServerRoot, ErrorLog, CustomLog визначають відповідно кореневої каталог http-сервера, шлях до журналу реєстрації помилок (error_log) і шлях до загального журналу звернень до сервера (access_log).
Директива CacheNegotiatedDocs дозволяє кешування документів, отриманих з сервера. За замовчуванням цей режим відключений, але, оскільки пропускна здатність вітчизняних Internet-каналів ще довго буде залишати бажати кращого, добре б його включити: тоді користувачеві не доведеться чекати завантаження картинок при кожному зверненні до вашої сторінці.
Налаштування віртуальних серверів в файлі httpd.conf
Директива ServerName, що знаходиться поза секцій VirtualHost, визначає ім'я основного сервера, т. Е. Сервера, кореневий каталог якого заданий директивою DocumentRoot в файлі srm.conf. Віртуальні сервери успадковують налаштування основного; при необхідності спеціальної настройки відповідні директиви поміщаються в секції VirtualHost, що відноситься до даного сервера. Допустимі будь-які директиви, які можуть зустрітися в файлах httpd.conf і srm.conf, наприклад DocumentRoot, ErrorLog, CustomLog, Location, ServerAdmin.
Налаштування перекодування російськомовних документів
Інструкції, що відповідають за перекодування, поділяються природним чином на три групи. До першої відносяться дві директиви, які вказують, в якому кодуванні зберігаються файли на диску: CharsetSourceEnc <кодировка> і CharsetByExtension <кодировка> <расширение1> <расширение2>.
Наприклад, файл httpd.conf може містити рядки:
CharsetByExtension windows-1251 .txt
Такий запис означає, що всі файли зберігаються на диску в кодуванні koi8-r; виняток становлять текстові файли з розширенням txt, для яких використовується Windows-1251.
Якщо кодувань більше однієї і документи в кожної кодуванні зберігаються в своєму каталозі, директиви CharsetSourceEnc розміщуються у відповідні секції
Другу групу складають директиви CharsetDecl, CharsetAlias CharsetRecodeTable і CharsetWideRecode Table, які визначають назви кодувань, їх синоніми і таблиці перекодування. Всі вони розміщуються в секції
У третю, найчисленнішу групу входять директиви, які визначають порядок перекодування символів від сервера клієнту і назад.
Прийнято, щоб при попаданні на російськомовний сервер користувач отримував сторінку в "своїй" кодуванні, яка визначається автоматично на основі тієї інформації про операційну систему, яку передає серверу браузер: наприклад, встановивши, що користувач працює в Windows, сервер видає йому сторінку в кодуванні Windows- 1251, а встановивши, що він працює в Unix, видає сторінку в koi8. Якщо обрана таким чином сторінка не підходить, клієнт може змінити кодування вручну. Основних схем вибору три: по префіксу каталогу, по імені віртуального сервера і за номером порту. У кожної з них є свої переваги і свої недоліки.
Для організації вибору кодування по префіксу каталогу потрібно або внести в секцію VirtualHost рядок виду
Alias / koi / www / rmt
або створити у відповідному каталозі символічне посилання на себе:
При виборі кодування на ім'я сервера необхідно, щоб інформація про відповідні імена була задана в налаштуваннях DNS-сервера, який обслуговує даний домен, а в файл httpd.conf в секцію VirtualHost вносяться рядки:
CharsetByPort koi8-r 8100
CharsetByPort windows-1251 8101
CharsetByPort ibm866 8102
CharsetByPort iso-8859-5 8103
Номери портів не надто важливі. У стандартному налаштуванні Apache-RUS нумерація, як бачимо, починається з 8100, але частіше її починають з 8000 або 8080.
Дана схема не потребує внесення додаткових записів в DNS і дозволяє працювати з віртуальними серверами навіть клієнтам, які не підтримують протокол HTTP / 1.1, - адже кодування вибирається виходячи з числа, що вказує на номер порту Web-сервера (за замовчуванням це 80). Однак мережеві брандмауери іноді забороняють роботу з певними портами, і якщо таким брандмауером захищена мережа клієнта, він не зможе встановити з'єднання з вашим сервером. На жаль, подібна ситуація виникає частіше, ніж хотілося б.
Схема вибору кодування задається директивою CharsetSelectionOrder. Її параметри визначають порядок застосування правил вибору. Так, вибору по префіксу каталогу відповідає рядок
CharsetSelectionOrder Dirprefix Useragent Portnumber Hostname UriHostname
Вибору по імені домена - рядок
CharsetSelectionOrder Hostname UriHostname Useragent Portnumber Dirprefix
Для вибору за номером порту слід записати
CharsetSelectionOrder Portnumber Useragent Hostname UriHostname Dirprefix
Для повного відключення перекодування в каталозі або на віртуальному сервері служить директива Charset Disable On.
Після закінчення процедури налаштування слід запустити httpd-сервер. Для цього потрібно увійти в систему з привілеями користувача root і дати команду
(Починаючи з версії 27.4 - # / usr / local / apache / bin / apachectl start)
Лістинг 1 Фрагмент простого файлу access.conf
## access.conf - Apache HTTP server configuration file
# Access.conf: Global access configuration