Apache: HTTP сервер. Установка, настройка и русификация


Это очень старая статья.

Распространение и использование - бесплатное.
Текущая (6 марта 2000) версия 1.3.12, русификация 1.3.12 PL29.4 взята на Russian Apache.
Тестируем работоспособность (здесь не нужен mod_rcs, вместо него работает extra/mod_charset; прокси больше не используется)(Intel, RedHat Linux 6.0, ядро 2.11, egcs-2.91.66):
1. сносим httpd из поставки RHL (пакеты: mod_php3-manual, mod_php3-pgsql, mod_php3-imap, mod_php3, mod_perl, apache)
2. берем архив apache_1.3.12rusPL29.4 у Лехи, разархивируем его.
3. выбираем новое место для сервера /usr/local/apache (классический Layout Apach)
4. в src/Configuration.tmpl
OPTIM=-O2
Rule SHARED_CORE=no
Rule SHARED_CHAIN=no
раскоментируем модули info, rewrite, auth_dbm, expires, headers; закоментировать imap
5. тащим webcounter (2.2.5 на 6 марта 2000)
1. берем архив
2. разворачиваем его
3. копируем поддиректорию cntr в директорию apache/src/modules
4. запоминаем, что configure надо запускать с ключом
--activate-module=src/modules/cntr/mod_cntr.c
или в src/Configuration.tmpl добавляем строку
AddModule modules/cntr/mod_cntr.o
5. В httpd.conf добавить (можно также в .htaccess)
AddModule mod_cntr.c
CounterAutoAdd On
CounterFile имя-файла
CounterTimeFmt строка-для-форматирования-даты # по умолчанию "%A, %d-%b-%y %T %Z"
CounterFaceDir имя-директории-где-цифры-лежат
# отныне цифр разворачиваются не через cgi-bin а внутри сервера, надо задать хендлер
<Location /server-cntr>
SetHandler server-cntr
</Location>
<Location /server-cntr-debug>
SetHandler server-cntr-debug
</Location>
6. в поставку входит show-digits.cgi, который показывает список шрифтов. Его надо установить.
7. в поставку входят шрифты default и tiny. Другие формы цифр можно взять здесь преобразовать с помощью renamegif.pl. У меня их достаточно осталось от предыдущей версии.
8. преобразовать старые счетчики с помощью updatedbm.pl (не работает)
9. создать собственно файлы, в которых будут храниться счетчики, с соответствующими правами (nobody:nobody). Не давать же nobody возможность создавать файлы в этой директории!.
10. новый формат использования в html-тексте
img src="/server-cntr/path-info?face=facename_амперсенд_ndigit=n_амперсенд_fcount=n_амперсенд_trans
где
" path-info - имя файла, счетчик которого надо вставить (раньше было url=)
" face - имя шрифта (раньше было type=)
" ndigit - число цифр (раньше было length=)
" fcount - фиктивное значение счетчика (раньше было count=)
" trans - прозрачный фон
11. Переменные для SSI и CGI (использование: <!--#echo var="URL_COUNT"-->)
" URL_COUNT - счетчик числа обращений к файл
" URL_COUNT_RESET - время запуска счетчика
" URL_COUNT_DB - имя счетчиков
" URL_COUNT_TIMEFMT - формат для времен запуска
" URL_COUNT_FACEDIR - директория со шрифтами
" URL_COUNT_DINDEX - имя файла для индекса директорий (index.html)
12. Есть версия count.cgi на perl (требуется GD.pm and URI::URL (comes with libwww) )
13. Ручной доступ к базе данных счетчиков: countctl.pl (не работает)
countctl.pl [ -cdrv URL ] filename
-c добавить URL
-d удалить
-r сбросить
-s установить (берет с stdin или запрашивает в диалоге)
-v посмотреть
без флагов выдает дамп всей БД в формате: URL счетчик время-старта
6. если надо, то очистка от старой версии (make clean)
7. ./configure
8. make
9. make install (в /usr/local/apache), используется Layout Apache; нужны права root; не портит старые файлы настройки и т.п. (но запихивает образцовый сайт - свою документацию - в htdocs) ?
o bin
" htpasswd - создание и изменение плоских файлов для базововой аутентификации (формат имя:шифрованный-пароль)
" htdiggest - создание и изменение плоских файлов для digest аутентификации
" dbmmanage - создает и изменяет файлы для аутентификации пользователей в формате DBM
" ab - httpd benchmark
" apachectl - управление сервером. Команды:
" start
" stop
" restart
" fullstatus (нужен lynx и mod_status)
" status (-//-)
" graceful (restart без обрывания текущих соединений, журнал закрываются не сразу)
" configtest
" help
" logresolve - если журнал собирался без разрешения имен хостов по их IP адресам, эта утилита позволяет сделать это в фоновом режиме.
" rotatelog - режет журнал, если задать: TransferLog "|rotatelogs /path/to/logs/access_log интервал-времени"
" apxs - динамическое создание и загрузка модулей в apache сервер
" httpd - собственно сервер (сигнал HUP - заново прочесть конфигурацию, TERM - завершить свою работу и всех сыновей - в версии 1.1 не работало)
" -d ServerRoot
" -f config
" -C directive (выполнить директиву до чтения файла конфигурации)
" -c directivе (-//- после -//- )
" -D параметр (определение параметра для условно конфигурации)
" -L (выдать список директив для каждого модуля)
" -l (выдать список модулей)
" -t (проверить конфигурацию)
" -X (отладочный режим)
" -v (выдача краткой информации о версии сервера)
" -V (выдача полной информации о версии сервера)
" -S (разбор конфигурации виртуальных хостов)
" -h (выдать синтаксис командной строки)
o libexec
o man
" man1 (htpasswd.1, htdiggest.1, dbmmanage.1)
" man8 (httpd.8, ab.8, apachectl.8, logresolve.8, rotatelog.8, apxs.8)
o conf
" tables (табл перекодировки для Russian Apache)
" czech
" russian
" russian2
" access.conf - ныне пуст
" httpd.conf - основной файл конфигурации
" magic - для модуля mod_mime_magic (аналог команды file), не надо реедактировать
" mime.types - добавил строчку для .bz2 (иначе происходит перекодировка из русского в русский)
" srm.conf - ныне пуст
o htdocs - пустой сервер предоставляет документацию по сервер
" manual
" images
" misc
" mod
" vhosts
o cgi-bin
" printenv
" test-cgi
o icons - маленькие картинки
o include - (.h для компиляции динамически загружаемых модулей)
" xml
o logs
o proxy
10. конфигурируем сервер (все что по умолчанию, особенно всякие глупости типа имен файлов, не упоминается)
o httpd.conf
" глобальные параметры
" ServerType standalone
" ServerRoot "/usr/local/apache"
" PidFile /usr/local/apache/log/httpd.pid
" ResourceConfig /dev/null
" AccessConfig /dev/null
" Timeout 120
" KeepAlive On
" MaxKeepAliveRequests 100
" KeepAliveTimeout 15
" MinSpareServers 5
" MaxSpareServers 10
" StartServers 5
" MaxClients 150
" MaxRequestsPerChild 0 (если будет отъедать память как в Solaris, то поставить 30)
" Listen адрес-хоста:80 (именно адрес, ибо у меня несколько IP-адресов на хост)
" ExtendedStatus On
" главный сервер (он же определяет параметры по умолчанию для виртуальных хостов)
" #Port 80 (ибо есть Listen)
" User nobody
" Group nobody
" ServerAdmin bog@deol.ru.
" ServerName имя-без-точки-в-конце
" DocumentRoot "/usr/local/apache/htdocs"
" для директории / задаем Options FollowSymLinks и AllowOverride None
" для основной директории задаем Options Indexes FollowSymLinks IncludesNOEXEC, AllowOverride None, ограничения на доступ: order allow,deny и allow from all
" UserDir public_html и права доступа
" DirectoryIndex index.html index.htm
" AccessFileName .htaccess
" запрет на чтение .htaccess
" UseCanonicalName on
" HostnameLookups on (отключить для оптимизации, но тогда поднастроить обработку журналов)
" ErrorLog /usr/local/apache/logs/main.error_log
" LogLevel info (м.б. уменьшить до notice или warn потом)
" LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %v" combined (%v добавляем, чтобы явно знать какой виртуальный хост обработал заявку, но он вместо имени хоста из запроса подставляет результат reverse DNS IP-адреса сервера; может %{HTTP_HOST}e поставить, но некоторые клиенты не посылают поле HOST?, - analog надо подработать)
" CustomLog /usr/local/apache/logs/main.combined_log combined
" ServerSignature on
" алиас и права для директории иконок
" ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" и права для директории (no override, no options)
" только для тестового сервера: Redirect /~bog http://www.deol.ru/~bog
" генерация индексов директорий
" FancyIndexing on
" описание иконок для красивых индексов и прочего оформления (разные модификации AddIcon)
" всякие там Description, header и readme, indexignore и пр.
" LanguagePriority ru en
" AddType text/html .shtml (SSI)
" AddHandler server-parsed .shtml (SSI)
" исключения для разных плохо сделанных броузеров
" разрешаем server-status и server-info со своего домена
" описание виртуальных хостов
o .htaccess в директориях
o линк
" share
" cgi-bin
" icons
" htdocs
o конфигурация дополнительных модулей
" mod_cntr
" mod_charset (русификация)
" включение кодировок и добавление алиасов mac (x-mac-cyrillic) и lat (translit)
11. дырки в firewall
o на входе в компьютер
o для диалапных клиентов
o для доступа извне
12. PHP
13. позже разобраться
o DSO
o suexec
o perl
Тестируем работоспособность (здесь не нужен mod_rcs, вместо него работает extra/mod_charset)(SPARC, Solaris 2.5, gcc 2.6.2):
1. берем архив apache_1.3.4rusPL27.4 у Лехи, разархивируем его.
2. сносим старый httpd
3. выбираем новое место для сервера /usr/local/apache
4. небольшие исправления:
o возвращаем обратно выдачу подробного сообщения об ошибке 500 в src/main/http_protocol.c (ap_send_error_response). Ради усиления безопасности вместо подробного сообщения выдавался совет обратиться к администратору. К сожалению, тот же текст выдавется в случае использования proxy и ошибке в имени хоста. Получать письмо от клиента каждый раз как он ошибется в имени хоста - это перебор...
5. в src/Configure.tmpl
o EXTRA_LIBS=-lc -lcrypt
o CC=cc
o OPTIM=-O (-O2 ведет к segmentation violation)
o RANLIB=touch (использование ranlib грохает ld)
o Rule SHARED_CORE=no
o Rule SHARED_CHAIN=no
o раскоментируем модули info, proxy, rewrite, auth_dbm, cern_meta, expires, headers
6. тащим webcounter (2.2.4 на 21 января 1999) - описан выше
7. ./configure
8. make (не забудь /usr/ccs/bin в PATH)
9. make install (в /usr/local/apache), используется Layout Apache, а не GNU; описан выше
10. конфигурируем сервер (все что по умолчанию, особенно всякие глупости типа имен файлов, не упоминается)
o httpd.conf
" глобальные параметры
" ServerType standalone
" ServerRoot "/usr/local/apache"
" PidFile /usr/local/apache/log/httpd.pid
" Timeout 120
" KeepAlive On
" MaxKeepAliveRequests 100
" KeepAliveTimeout 15
" MinSpareServers 5
" MaxSpareServers 10
" StartServers 5
" MaxClients 150
" MaxRequestsPerChild 30
" Listen адрес-хоста:80 (именно адрес, ибо у меня несколько IP-адресов на хост)
" Listen адрес-хоста:3346 (для proxy)
" ExtendedStatus On
" главный сервер (он же определяет параметры по умолчанию для виртуальных хостов)
" #Port 80 (ибо есть Listen)
" User nobody
" Group nobody
" ServerAdmin bog@deol.ru.
" ServerName имя-без-точки-в-конце
" DocumentRoot "/usr/local/apache/htdocs"
" для директории / задаем Options FollowSymLinks и AllowOverride None
" для основной директории задаем Options Indexes FollowSymLinks IncludesNOEXEC, AllowOverride None ограничения на доступ: order allow,deny и allow from all
" UserDir public_html
" DirectoryIndex index.html index.htm
" AccessFileName .htaccess
" запрет на чтение .htaccess
" UseCanonicalName on
" HostnameLookups on
" ErrorLog /usr/local/apache/logs/main.error_log
" LogLevel info (м.б. уменьшить до notice или warn потом)
" LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %v" combined (%v добавляем, чтобы явно знать какой виртуальный хост обработал заявку - analyze надо подработать)
" CustomLog /usr/local/apache/logs/main.combined_log combined
" ServerSignature on
" алиас и права для директории иконок
" ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" и права для директории (no override, no options)
" только для тестового сервера: Redirect /~bog http://www.deol.ru/~bog
" генерация индексов директорий
" FancyIndexing on
" описание иконок для красивых индексов и прочего оформления (разные модификации AddIcon)
" всякие там Description, header и readme, indexignore и пр.
" LanguagePriority ru en
" AddType text/html .shtml (SSI)
" AddHandler server-parsed .shtml (SSI)
" исключения для разных плохо сделанных броузеров
" разрешаем server-status и server-info со своего домена
" виртуальный сервер под proxy
" NameVirtualHost http-proxy.deol.ru:81 (?)
" Port 81
" ProxyRequests On
" ограничения на доступ к директории proxy: только изнутри
" CacheRoot /usr/local/apache/proxy
" CacheSize сколько-не-жалко-килобайт
" CacheGcInterval 4 (?)
" CacheMaxExpire 24
" CacheLastModifiedFactor 0.1 (?)
" CacheDefaultExpire 4 (?)
" NoCache список-доменов-через-пробел
" ErrorLog /usr/local/apache/logs/proxy_error_log
" CustomLog /usr/local/apache/logs/proxy_combined_log combined
" описание виртуальных хостов
o .htaccess в директориях
o линк
" share
" cgi-bin
" icons
" htdocs
" var
" log
" proxy
o конфигурация дополнительных модулей
" mod_cntr
" mod_charset
11. изменяем /etc/rc2.d/S99httpd, чтобы он запускал apachectl (start, stop, restart)
12. если не хватает дескрипторов файлов по умолчанию (64), то в apachectl вставить
ulimit -S -n 1024
ядро Solaris имеет ограничение 1024 fd, stdlib - 255. Рекомендуется поиграться с -DHIGH_SLACK_LINE=256 в EXTRA_CFLAGS пр сборке сервера. Как только сервер требуется 256й файл, так начинаются глюки (я так понимаю, что обращение к двум файлам идет через один дескриптор), причем понять что эти глюки из-за недостатка дескрипторов невозможно. Например, у меня не записывался файл httpd.pid, хотя сам файл создавался или не работал /cgi-bin/count ил выдавалась ошибка "forbidden access" или еще что-нибудь, причем proctool преспокойно показывает, что fd = 1024.
13. задаем права на исполнение тех файлов в cgi-bin, которые нужны
14. поменять в crontab процедуру регулярной очистки httpd на использование apachectl
15. когда все будет хорошо - удалить старый сервер
Конфигурация
Конфигурация сервера задается в файлах httpd.conf, srm.conf, access.conf и .htaccess. Раньше в httpd.conf хранилась общая конфигурация сервера, в srm.conf описание доступных ресурсов, в access.conf - права доступа к ресурсам. В нынешней версии любая директива конфигурации может лежать в любом из этих файлов, так что можно представить себе один виртуальный файл конфигура сконкатенированный из этих трех (httd + srm + access). Начиная с версии 1.3.4 все директивы конфигурации слиты в httpd.conf. Файлы .htaccess могут лежать в директориях переопределять права доступа и другие параметры данных директорий. Некоторые модули могут иметь свои отдельные файл конфигурации (например, mod_charset требует файлов, хранящих табл перекодировки).
Сервер apache разбит на модули (в т.ч. core), каждая директива определяет поведение одного из модулей и имеет смысл только если этот модуль включен пр сборке.
Контексты:
" S сервер - директива действует на поведение сервера целиком
" V виртуальный хост - действует, если запрос касается данного виртуального хоста (внутри скобок VirtualHost)
" D директория - определяет свойства только данной директории (внутри скобок Directory)
" A .htaccess - определяет свойства только данной директории (определяется в файле .htaccess)
Порядок применения директив определения свойств и прав доступа к объекту (все, кроме Directory, применются по порядку; Directory применяются от кратчайшего пути к само длинному; секции внутри VirtualHost применяются после тех, которые снаружи):
1. секция Directory (кроме регулярных выражений) и .htaccess (.htaccess перебивает Directory, если разрешено AllowOverride)
2. секция DirectoryMatch и Directory регулярные выражения
3. секции Files и FilesMatch
4. секции Location и LocationMatch
Права доступа, свойства объекта и где его взять
" DA allow from {host}
определяет с каких адресов будет доступ к данной директории
o all - со всех
o доменное имя (м.б. частичное) - с тех хостов, имя которых заканчивается на эту строку
o полный IP адре
o частичный IP адрес - первые 1, 2 или 3 байта IP адреса
o a.b.c.d/e.f.g.h - network/netmask пара
o a.b.c.d/nnn - network/netpart-bits
" DA allow from env=имя-переменной
доступ разрешается только есл определена соответствующая переменна окружения
" D AllowOverride {None | All | AuthConfig | FileInfo | Indexes | Limit | Options} - какие директивы из .htaccess в данно директории могут забивать оп конфигурации сервера
" D AuthName домен-авторизации - какой домен авторизации клиент должен использовать пр определении имени и пароля
" DA deny from {host}
определяет с каких адресов не будет доступа к данно директор
o all - со всех
o доменное имя (м.б. частичное) - с тех хостов, имя которых заканчивается на эту строк
o полный IP адре
o частичный IP адрес - первые 1, 2 или 3 байта IP адреса
o a.b.c.d/e.f.g.h - network/netmask пара
o a.b.c.d/nnn - network/netpart-bits
" DA deny from env=имя-переменной
доступ не разрешается есл определена соответствующая переменна окружения
" SV <Directory имя-директирии > ... < /Directory >
внутр определяются права и свойства данно директории. В качестве имен используется полный путь или wild-card как в shell.
" SV < DirectoryMatch регулярное-выражение > ... < /DirectoryMatch >
внутр определяются права и свойства данно директории. В качестве имен используется регулярное выражение.
" SV DocumentRoot путь
определяет, где находится корень документов сервера ил виртуального сервера
" SVDA ErrorDocument error-code document
какой документ выдавать в случае ошибка указанным кодом (есл начинается с кавычек, то далее идет текст сообщения; если со слеша, то далее идет локальный URL - в том числе CGI, в который передаются описывающие ситуа переменные окружения; можно использовать полную форму URL)
" SVA < Files имя-файла > ... < /Files >
внутр определяются права и свойства файлаов соответствующим basename. качестве имен используется basename или wild-card как в shell. Может находиться внутри секции Directory или .htaccess.
" SVA < FilesMatch имя-файла > ... < /FilesMatch >
внутр определяются права и свойства файлаов соответствующим basename. качестве имен используется регулярное выражение Может находиться внутри секции Directory или .htaccess.
" SVDA < Limit {метод} > ... < /Limit >
это скобки для группы директив управляющих доступом. Метод - GET, POST, PUT, DELETE, CONNECT or OPTIONS. Если директив управления доступо используются вне скобок Limit, то он используются для ограничения любого метода доступа.
" SV <Location URL > ... < /Location >
внутр определются свойства и права доступа для данного URL (полная строка или шаблон). Использование директивы SetHandler внутр скобок позволяет задать специальн обработчик для данного URL.
" SV <LocationMatch URL > ... < /LocationMatch >
внутр определются свойства и права доступа для данного URL (регулярное выражение). Использование директивы SetHandler внутр скобок позволяет задать специальн обработчик для данного URL.
" SVDA Options [+|-]option ...
определяет возможности сервера в данно директор
o ALL (по умолчанию) - все кроме MultiView
o ExecCGI - разрешается выполнение CGI
o FollowSymLinks - ходить по символьным ссылка
o Includes - использовать SSI
o IncludesNOEXEC - использовать SSI, кроме exec и include CGI
o Indexes - генерировать листин директории, есл отсутствует файл index.html
o MultiViews - определять представление ресурса в зависмости от предпочтений клиента (тип носителя, язык, набор символов кодировка) (не надо это включать)
o SymLinksIfOwnerMatch - следовать по символьным ссылкам, только есл владелец целевого файла совпадает владельцем ссылки (а я-то, старый дурак, ?думал, что владелец ссылки всегда root)
" DA order порядок
определяет очередность в которо применяются директивы allow и deny
o deny,allow - перв применяются директивы deny, затем allow (начальное состояние - доступ разрешен)
o allow,deny - перв применяются директивы allow, затем deny (начальное состояние - запрещено)
o mutual-failure - доступ только с тех хостов, которые перечислены в allow и не перечислены в deny
" DA require entity-name entity entity...
како пользователь может иметь достуо к директор
o user {userid}
только пользователи с данными имена
o group {group-name}
только пользователи из данной групп
o valid-user
любо аутентифицированн пользователь
" DA satisfy [all|any]
если для ограничения доступа используется и имя/пароль и IP адрес, то сервер будет требовать соответствия обоих критериев (all) или любого из них (any). По умолчанию - all.
"
Общие характеристик сервера/виртуального сервера
" SV ErrorLog filename | syslog:facility
куда выдавать сообщения об ошибках.
" SV Group группа
с правами какой unix-группы будет обрабатываться запрос.
" SVD HostNameLookups on | off | double
определять ли имя клиента по его IP-адресу (double - сначала делается обратный, затем прямо запрос к DNS, результат сравниваются).
" SVDA < IfDefine [!]parameter-name > ... </IfDefine >
условная конфигурация, если параметр (не)определен.
" SVDA < IfModule [!]module-name > ... </IfModulee >
условная конфигурация, если модуль (не)включен в состав сервера.
" S Include имя-файла
вставить содержимое файла в состав конфигурации в данном месте.
" S KeepAlive on | off
обслуживать несколько запросов , не прерывая TCP-соединения с клиентом.
" S KeepAliveTimeout seconds
" SV LogLevel emerg | alert | crit | error | warn | notice | info | debug
что писать в журнал ошибок
" S MaxClients максимальное-число-клиентов
" S MaxKeepAliveRequests максимальное-число-запросов-при-keep-alive
" S MaxRequestsPerChild максимальное-число-запросов-обслуживаемых-одним-процессом
" S MaxSpareServers максимальное-число-простаивающих-процессов
" S MinSpareServers минимальное-число-простаивающих-процессов
" S Port номер-порта
к какому порт прислушиваться (по умолчанию - 80).
" SV RLimitCPU soft-limit ?max-resource-limit
задает максимальное число секунд CPU для любого процесса. Оба параметра могут быть числом ил словом max
" SV RlimitMEM soft-limit ?max-resource-limit
задает максимальное число байт, которое может использовать каждый процесс. Оба параметра могут быть числом или словом max
" SV RlimitNPROC soft-limit ?max-resource-limit
задает максимальное число процессов которое может запустить каж пользователь. Оба параметра могут быть числом ил словом max
" SV ServerAdmin email-address
" SV ServerName полное-доменое-имя
используется для redirect. По умолчанию сервер пытается определить его сам, но в Solaris лучше задать вручную.
" S ServerRoot полное-имя-директории
задает место, где лежат все файл сервера по умолчанию (и откуда отсчитываются относительные имена файлов)
" SVDA ServerSignature Off | On | EMail
какую информацию включать в конце документов, генерируемых сервером (например, сообщений об ошибках)
o Off - никако
o On - имя сервера и версия П
o EMail - еще и почтовый адре администратора
" S ServerTokens Minimal|OS|Full
что сервер сообщает о себе в заголовке Server: (примерный текст):
o Minimal - Server: Apache/1.3.0
o OS - Server: Apache/1.3.0 (Unix)
o Full - Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2
" S ServerType standalone | inetd
" S StartServers number
сколько сыновних процессов запускать при начальном старте
" S TimeOut секунд
" SVDA UseCanonicalName on|off
используется при генерации URL, ссылающихся на этот же сервер
o On - использовать имя, определенное в ServerName и Port
o Off - использовать параметры из запроса пользователя
" SV User uid
с правами какого пользователя будет работать сервер
Виртуальные сервера
" S NameVirtualHost addr[:port]
привязывает виртуальный хост к данно адресу/порту (запросы на этот адрес будут распределяться только между эт виртуальными хостами)
" V ServerAlias host1 host2 ...
задает альтернативные имена для виртуального хоста
" V ServerPath путь
все запросы, URI которых начинаются с путь будут обслуживаться эт виртуальным сервером (конечно, адрес и порт должн соответствовать тоже)
" S < VirtualHost {адрес[:порт]} > ... < /VirtualHost >
это скобки, определяющие описание виртуального сервера. Адрес и порт определяют адрес, по которому он будет отзываться. Внутри можно использовать любые директивы, позволяющие контекст V.
Преобразование адресов
" SV Alias URL dirname-filename
запрос с URL (% декодируются), начинающегося с URL, будет отображен на файл, начинающийся с dirname-filename (м.б. вне DocumentRoot). Доступ к dirname-filename должен быть разрешен.
" SV AliasMatch регулярное-выражение dirname-filename
аналогично Alias, но сравнение производится в соответств регулярн выражением. Часть регулярного выражения, заключенная в скобки, запоминается как позиционный параметр и м.б. вставлена в правую часть (синтаксис как в sh)
" SVDA Redirect [ status ] url-path url
преобразование %-декодированного иходного URL (url-path) ?в результатирующий (url). Клиент возвращается сообщение об ошибке и новый URL, который он должен запросить. Имеет больш приоритет, чем Alias или ScriptAlias. url-path д.б. абсолютным адресом. status (по умолчанию temporary - код 302) определяет код возврата:
o permanent - ресур перемещен навсегда (301)
o temp - ресурс перемещен временно (302)
o seeother - ресурс замещен (303)
o gone - ресурс удален (410) (в этом случае новый URL д.б. опущен)
" SV RedirectMatch [ status ] regex url
аналогично Redirect, но сравнение производится не на совпадение начал, а по соответствию URL от клиента регулярному выражению. Строки, соответствующие подвыражениям в скобках , помещаются в позиционные переменные и м.б. использован аналогично shell.
" SV ScriptAlias url-path directory-filename
аналогично директиве Alias, но дополнительно пометить директорию как содержащую CGI
" SV ScriptAliasMatch regex directory-filename
аналогично директиве AliasMatch, но дополнительно пометить директорию как содержащую CGI
Преобразование http-заголовков (в стиле метафайла CERN и др.)
" AddType httpd/send-as-is asis
файлы, имеющие суффикс .asis, посылаются "как есть", т.е. считается что http-заголовки уже лежат в файле генерировать их не надо
" SVDA MetaFiles on/off - включить/выключить преобразование для данно директор
" SVDA MetaDir directory-name - имя директории, в которой лежат метафайлы (по умолчанию .web внутр текущей директории)
" SVDA MetaSuffix suffix - суффикс, котор добавляется к имени файла, чтобы найт метафайл для него (по умолчанию .meta)
" SVDA ExpiresActive on|off - посылать ли заголовок Expire (срок хранения документа в кэше)
" SVDA ExpiresByType MIME-type однобуквенный-код-и-число-секунд
ко
o M - время последне модификации файла
o A - время доступа к файл
можно также использовать следующую строку в кавычках:
access/modification [plus ] {число years|months|weeks|days|hours|minutes|secunds}
" SVDA ExpiresDefaults MIME-type однобуквенный-код-и-число-секунд
" SVDA Header [ set | append | add ] header value-в-кавычках
заменить/слить/добавить заголовок
" SVDA Header unset header
удалить заголовок (есл несколько заголовков с одним именем, то удаляется только первый)
Безопасность
" DA AuthGroupFile filename
определяет имя файла, в которо хранится список групп пользователей в формате: каждая строка определяет группу и имеет вид:
имя-группы: {имя-пользователя}
" DA AuthUserFile filename
определяет имя файла, в которо хранится список пользователей в формате:
имя-пользователя:шифрованный-пароль
" D AuthType {Basic | Digest ] - тип аутентифика
" DA AuthAuthoritative on | off
по умолчанию - on. Есл установлено off, то проце аутентифика авторизации, в случае отсутствия имен пользователя в текущей базе данных, обращаются к модуля аутентификации нижнего уровня.
" DA AuthDBMGroupFile filename
аналогично AuthGroupFile, но использованием dbm (ключ - имя пользователя, значение - список групп через запятую)
" DA AuthDBMUserFile filename
аналогично AuthUserFile, но использованием dbm (ключ - имя пользователя, значение - шифрованный пароль). ?Если AuthDBMUserFile и AuthDBMGroupFile указывают на один и тот же файл, то это совмещенный файл (ключ - имя пользователя, значение - шифрованный пароль, за которым следует двоеточие и список групп через запятую).
" DA AuthDBMAuthoritative on | off
по умолчанию - on. Есл установлено off, то проце аутентифика авторизации, в случае отсутствия имен пользователя в текущей базе данных, обращаются к модуля аутентификации нижнего уровня.
" DA AuthDigestFile filename
определяет файл с имена пользователе шифрованными паролями по алгоритму MD5. Файл создается утилитой htdigest (исходники в директории support). Вместо
AuthType Basic
надо указать
AuthType Digest
Индекс директории (автоматическая генерация, если отсутствует вручную сделанный индексный файл и разрешена Option Indexes)
" SVDA AddAlt string file file...
какую строчку текста показывать вместо иконки, есл клиента отключена загрузка картинок. file задается суффиксом, частичным именем файла или wild-card
" SVDA AddAltByEncoding string MIME-encoding MIME-encoding...
аналогично, но определяется не по имени файла, а по MIME-кодировке (типа x-compress).
" SVDA AddAltByType string MIME-type MIME-type ..
аналогично, но определяется по MIME-тип (например, text/html)
" SVDA AddDescription string file file...
текстовое описание файла. file задается суффиксом, частичным именем файла, wild-card или цел именем.
" SVDA AddIcon icon name name ...
определяет какую картинк показать для файла, соответствующего name. icon имеет формат либо URL, либо в круглых скобках альтернативный текст и URL через запятую. name задается суффиксом, частичным именем файла, wild-card или цел именем.или ключевыми словами ^^DIRECTORY^^ и ^^BLANKICON^^.
" SVDA AddIconByEncoding icon MIME-encoding MIME-encoding ...
аналогично, но определяется не по имени файла, а по MIME-кодировке (типа x-compress).
" SVDA AddIconByType icon MIME-type MIME-type ...
аналогично, но определяется по MIME-тип (например, text/html)
" SVDA DefaultIcon url
если никакая иконка не подошла, то будет использоватся эта
" SVDA DirectoryIndex local-url local-url ...
задает имя файла (относительно запрашиваемо директории), в котором лежит индек директории (по умолчанию - index.html)
" SVDA FancyIndexing on|off
делать красивый индекс ( возможность сортировки по столбцам)
" SVDA HeaderName filename
в качестве заголовка индекса будет вставлен указанный файл (сначала ищется файл filename.html, затем просто filename).
" SVDA IndexIgnore file file ...
список файлов, которые надо скрывать. file задается суффиксом, частичным именем файла, wild-card или цел именем.
" SVDA IndexOptions [+|-]option [+|-]option ... (оп сливаются с учетом знаков)
o FancyIndexing - делать красивый индекс ( возможность сортировки по столбцам)
o IconHeight[=pixels]
o IconsAreLinks - для fancy indexing
o IconWidth[=pixels]
o NameWidth=[n | *] - ширина колонки (* - использовать длину самого длинного имени файла)
o ScanHTMLTitles - вытаскивать описание файла из HTML-текста (только fancy indexing)
o SuppressColumnSorting - имена колонок не будут вызывать сортировку индекса при fancy indexing
o SuppressDescription - не включать колонк описанием файла при fancy indexing
o SuppressHTMLPreamble - подавить вставку заголовка пере включением файла, определенного по HeaderName
o SuppressLastModified - подавление колонки при fancy indexing
o SuppressSize - подавление колонки при fancy indexing
" SVDA ReadmeName filename
в конец индекса будет вставлен указанный файл (сначала ищется файл filename.html, затем просто filename).
Вызов CGI, SSI и т.п.
" CGI: любой файл с MIME-типом application/x-httpd-cgi (директива AddType или ScriptAlias) ?или хендлером cgi-script (директива addHandler) будет обрабатываться модулем cgi.
Перед вызовом будут добавлены переменные окружения, определенные стандартом, а также DOCUMENT_ROOT, REMOTE_HOST, REMOTE_IDENT и REMOTE_USER (если эта информация доступна).
o S ScriptLog filename - журнал ошибок
o S ScriptLogLength size - максимальный размер журнала ошибок (по умолчанию - 10 МБ)
o S ScriptLogBuffer size - размер тела PUT или POST (по умолчанию - 1024)
o SV SetEnv variable value - установка переменных окружения перед запуском CGI
" SV PassEnv variable variable ...
передaча указанных переменных окружения на момент запуска httpd в CGI или SSI
" SV UnsetEnv variable variable ...
удалить указанные переменные из окружения перед запуском CGI или SSI
" SSI
Карта, разбираемая сервером, (image map) не используется и не описывается (пусть разбор идет только на клиентской стороне).
Выдача информации о составе модуле сервера (mod_info):
" SVDA обеспечение доступа к информации (вместо /server-info можно указать другой адрес, рекомендуется ограничить доступ):
< Location /server-info >
SetHandler server-info
< /Location >
" SV AddModuleInfo module-name string
срока будет разобрана как HTML-документ и показана в поле "дополнительная информация о модуле"
Журналы (модуль mod_log_config; журнал ошибок конфигурируется другими средствами)
Каждый виртуальный сервер может вест ипроизвольное число журналов в различных форматах.
Директивы (рекомендуется использовать только LogFormat для определения формата и CustomLog для создания журнала)
" SV CookieLog filename
Только для совместимости со старым модулем mod_cookie. Рекомендуется использовать mod_usertrack и CustomLog.
" SV CustomLog файл-или-канал формат-или-имя-формата
Вести журнал определенного формата в указанном файле или подать на вход программе. Имя файла либо полностью, либо относительно ServerRoot. Канал записывается как символ "|", за которым идет имя запускаемой команды. Журнал подается на стандартный вход команды, которая запускается с теми же правами, что и httpd. Имя формата определяется в LogFormat
" SV LogFormat формат [имя-формата]
Определить формат указанным именем. По умолчанию - "%h %l %u %t "%r" %s %b" - так называемый Common Log Format (CLF)
" SV TransferLog файл-или-канал
аналогично CustomLog, но формат определяется в предыдущей LogFormat без имени.
Формат журнала: каждый запрос к сервер порождает строку в журнале, состоящую из слов (token), разделенных пробелами. Если слово пусто, то оно записывается как знак минус. Если слово содержит пробелы, то оно должно заключаться в кавычки( это надо само предусмотреть при задании формата). Пр задании формата используются литеральные символы, которые копируются в журнал директивы, которые начинаются со знака "процент" завершаются однобуквенным имене директивы. Между ними может стоять условие в виде списка кодов завершения через запятую (м.б. предваренных восклицательным знаком) - если условие не выполняется, то вместо token записывается минус. Директива в описании формата замещается соответствующим значением. Директивы:
" %b - количество посланных байт, кроме HTTP-заголовка
" %f - имя файла
" %{имя}e - значение переменной окружения.
" %h - имя удаленного хоста
" %a - адрес удаленного хоста
" %{имя-заголовка}i - значение заголовка запроса. Наиболее часто используются (где взять весь список?)
o Referer - откуда была ссылка на документ
o User-agent - что сказал о себе броузер
" %l - имя удаленного пользователя (есл задействован ident)
" %{имя-заметки}n - содержимое заметк указанным именем, сгенеренной другим модуле
" %{имя-заголовка}o - значение заголовка ответа
" %p - канонический номер порта сервера
" %P - pid процесса, обслуживающего запро
" %r - первая строка запроса
" %s - статус запроса (ко возврата)
" %t - время в CLF-формате ([day2d/month3l/year4d:hour2l:minute2l:second2l zone], где zone в формате [+|-]hour2dmin2d)
" %{формат}t - время формат выдачи описан в strftime(3)
" %u - имя авторизованного пользователя (если статус не равен 401)
" %U - запрошенный URL
" %v - канонический ServerName (как сделать здесь имя виртуального хоста?)
Русификация (mod_charset)
Занимается перекодированием с русского на русский из кодировки хранения в кодировку пересылки (или из полученной от пользователя кодировки в кодировку хранения).
Директивы
" определение кодировки и таблиц перекодировки
o SV CharsetDecl имя-кодировки ru [ S ] ( флаг S подавляет выдачу charset=... клиенту)
o SV CharsetRecodeTable из-какой в-какую имя-файла-с-таблицей [ имя-файла-с-обратной-таблицей ] (обратная таблица может создаваться автоматически)
o SV CharsetWideRecodeTable из-какой в-какую имя-файла-с-таблицей (для перекодировок из символа в строку: например, для транслитерации)
o SVDLA CharsetAlias официальное-имя синоним ... (определение синонимов для имени кодировки)
" определение кодировки хранения (HTML/CGI/SSI)
o SVDLA CharsetSourceEnc имя-кодировки
o SVDLA CharsetByExtension имя-кодировки .ext1 ...
o SVDLA CharsetProcessType mime-type (какие типы файлы надо обрабатывать; всегда обрабатываются - text/*)
" определение кодировки клиента
o явно (по HTTP-заголовкам Accept-Charset: или Accept: text/x-cyrillic-...)
o SVDLA CharsetPriority имя-кодировки1 ... (определение приоритета, если клиент задает несколько Accept, при равенстве приоритетов - по порядку в описании)
o SVDLA CharsetBrokenAccept Agent-Substring accept_charset_string (игнорировать данный загловок Accept от данного клиента - использовать другия механизмы для определения типа клиентской кодировки)
o SVDLA CharsetSelectionOrder Rule1 ... (определяет приоритет способов определения кодировки клиента, по умолчанию - Portnumber Hostname URIHostname EnvVariable Dirprefix Useragent)
" Portnumber (по номеру порта, см. CharsetByPort)
" Hostname (если каноническое имя хоста начинается с имени кодировки или его синонима, то выбирается эта кодировка)
" URIHostname (если имя в заголовке Host: начинается с имени кодировки или его синонима, то выбирается эта кодировка)
" EnvVariable (по переменной FORCE_CHARSET, определенной внешними модулями, например, module_rewrite)
" Dirprefix (по началу имени директории)
" Useragent (по HTTP-заголовку User-Agent, см. CharsetAgent)
o SVDLA CharsetDefault имя-кодировки (принимается в качестве кодировки клиента, если все остальные способы не помогли)
o SVDLA CharsetByPort имя-кодировки номер-порта
o SVDLA CharsetAgent имя-кодировки шаблон ... (не регулярные выражения, а просто подстроки)
" дополнительная обработка специфических случаев
o SVDLA AddHandler strip-meta-http .ext1 ... (удалять теги "META HTTP-EQUIV=... charset=..." из HTML-файлов перед передачей их клиенту; не очень хорошая идея - конфликтует с другими обработчиками, но как еще бороться с FrontPage, который их вставляет, и Netscape/IE, которые встретов такую строчку в HTML-коде, перестают обращать внимание на HTTP-заголовок с правильно выставленным charset. Подробности здесь)
o SVDLA CharsetBadAgent шаблон ... (клиентским программам, подпадающим под шаблон, не будет выдаваться строка charset= в HTTP-заголовке Content-type)
o SVDLA CharsetErrReject On | Off (что делать, если клиент запрашивает неизвестную кодировку в Accept/Accept-charset: выдавать сообщение об ошибке или (по умолчанию) пытаться определить "более правильную" кодировку)
o SVDLA CharsetUseMultiViews Off
o SVDLA CharsetRecodeHeaders Off (надеюсь, что в заголовках русского текста не будет)
o SVDLA CharsetDisable On | Off (выключить работу модуля для данного сервера/директории)
o SVDLA CharsetRecodeFilenames On | Off (перекодировать имена файлов; по умолчанию включена!)
o SVDLA CharsetOverrideExpires On | Off (если включен - по умолчанию - то заменять заголовки Expires:, сгенерированные другими модулями на свои)
o SVDLA CharsetDisableForcedExpires On | Off (если выключен - по умолчанию - то сервер выдает заголовок "Expires: 1 Jan 1970" дабы документ не кешировался, если его кодировка определилась по User-Agent или Accept-charset. Рекомендуется использовать для форм или frameset: иначе Back будет возвращать на пустую форму)
o SVDLA CharsetRecodeMethodsIn метод1 ... (включить обработку запроса для данного метода: GET, POST, PUT, ALL (по умолчанию), NONE)
o SVDLA CharsetRecodeMethodsOut метод1 ... (включить обработку ответа для данного метода: GET, POST, PUT, ALL (по умолчанию), NONE)
o SVDLA CharsetRecodeMultipartForms On (надо выключить, если клиент передает с помощью POST двоичные данные)
o SVDLA CharsetDisableAcceptCharset Off
" увеличение кешируемости
o SVDLA CharsetAutoRedirect - позволяет обеспечить кешируемость документов с помощью автоматического перенаправления запроса на документ с тем же содержимым, но с "жестким" определением кодировка (по порту, по имени хоста, директории, а не User-Agent или Accept. Это обеспечивает кеширование, но порождает лишний запрос. Проблемы также с директивой Redirect в случае с определением кодировки по номеру порта (CharsetSoftRedirect, CharsetSoftRedirectPermanent, CharsetSoftRedirectTemp).
o SVDLA CharsetNormalizeToURL
o SVDLA CharsetNormalizeTypes
o SVDLA CharsetRedirectFromOriginalURL
o SVDLA CharsetNoAutoRedirectForDefaultCharset
Дополнительные переменные (для CGI, других модулей и SSI)
" CHARSET (кодировка клиента)
" SOURCE_CHARSET (CGI д.олжен выводить в той же кодировке)
" CHARSET_SERVER_NAME
" CHARSET_SERVER_PORT
" CHARSET_HTTP_METHOD (строка "http://" или "https://", т.е. полный URL запроса восстанавливается как ${CHARSET_HTTP_METHOD}${CHARSET_SERVER_NAME}${REQUEST_URI}
" CHARSET_SAVED_QUERY_STRING (QUERY_STRING до перекодировки)
" CHARSET_SAVED_PATH_INFO (PATH_INFO до перекодировки)
Переменные окружения.
" CHARSET="koi8-r" - русификация
" CHARSET_DETERMINED_BY="UserAgent" - русификация
" CHARSET_HTTP_METHOD="http://" - русификация
" CHARSET_SERVER_NAME="имя-определенное-по-IP:80" - русификация
" CHARSET_SERVER_PORT="80" - русификация
" DOCUMENT_ROOT="абсолютное-имя-директории-документов-виртуального-сервера"
" GATEWAY_INTERFACE="CGI/1.1"
" HTTP_ACCEPT="image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*"
" HTTP_ACCEPT_CHARSET="iso-8859-1,*,utf-8"
" HTTP_ACCEPT_LANGUAGE="ru, en"
" HTTP_CACHE_CONTROL="max-age=259200"
" HTTP_CONNECTION="keep-alive"
" HTTP_HOST="www.printhouse.ru" - если клиент посылает поле HOST в запросе
" HTTP_IF_MODIFIED_SINCE="Wednesday, 26-Jul-00 15:20:17 GMT; length=1437"
" HTTP_USER_AGENT="Mozilla/4.05 [en] (X11; I; SunOS 5.5 sun4m)"
" HTTP_VIA="1.0 acache.deol.ru:3129 (Squid/2.3.STABLE1)" - proxy
" HTTP_X_FORWARDED_FOR="195.161.72.28" - proxy
" PATH="директории, в которых ищутся исполняемые программы"
" QUERY_STRING=""
" REMOTE_ADDR="клиент или прокси"
" REMOTE_PORT="39885"
" REQUEST_METHOD="GET"
" REQUEST_URI="/cgi-bin/printenv"
" SCRIPT_FILENAME=абсолютное имя файла"
" SCRIPT_NAME="логическое имя объекта"
" SERVER_ADDR="IP адрес"
" SERVER_ADMIN="почтовый адрес администратора сервера"
" SERVER_NAME="имя-определенное-по-IP"
" SERVER_PORT="80"
" SERVER_PROTOCOL="HTTP/1.0"
" SERVER_SIGNATURE="
Apache/1.3.12 Server at dual.deol.ru Port 80
"
" SERVER_SOFTWARE="Apache/1.3.12 (Unix) rus/PL29.4"
" SOURCE_CHARSET="windows-1251" - русификация
" URL_COUNT="2" - значение счетчика
" URL_COUNT_DB="абсолютный адрес файла, в котором хранятся счетчики"
" URL_COUNT_DINDEX="index.html index.htm"
" URL_COUNT_FACEDIR="абсолютный адрес директории с картинками для цифр"
" URL_COUNT_RESET="Wednesday, 26-Jul-00 19:20:17 MSD"
" URL_COUNT_TIMEFMT="%A, %d-%b-%y %T %Z"
" VRL_COVNT="II"

Обновлено: 13.03.2015