|

|
 |
ДОКУМЕНТАЦИЯ - HTTP СЕРВЕР APACHE
Ссылки:
Распространение и использование - бесплатное.
Рабочая лошадка 1.1b4 (проблема-2000 при использовании
include и генерации индексов) со своей русификацией (mod_rcs) счетчиком
(mod_cntr).
Текущая (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):
- сносим httpd из поставки RHL (пакеты: mod_php3-manual, mod_php3-pgsql,
mod_php3-imap, mod_php3, mod_perl, apache)
- берем архив apache_1.3.12rusPL29.4 у Лехи, разархивируем его.
- выбираем новое место для сервера /usr/local/apache (классический Layout
Apach)
- в src/Configuration.tmpl
- OPTIM=-O2
- Rule SHARED_CORE=no
- Rule SHARED_CHAIN=no
- раскоментируем модули info, rewrite, auth_dbm, expires, headers;
закоментировать imap
- тащим webcounter (2.2.5 на 6 марта 2000)
- берем
архив
- разворачиваем его
- копируем поддиректорию cntr в директорию apache/src/modules
- запоминаем, что configure надо запускать с ключом
--activate-module=src/modules/cntr/mod_cntr.c или в
src/Configuration.tmpl добвляем строку AddModule modules/cntr/mod_cntr.o
- В 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"больше"
- в поставку входит show-digits.cgi, который показывает список шрифтов.
Его надо установить.
- в поставку входят шрифты default и tiny. Другие формы цифр можно взять
здесь преобразовать с помощью
renamegif.pl. У меня их достаточно осталось от предыдущей версии.
- преобразовать старые счетчики с помощью updatedbm.pl (не
работает)
- создать собственно файлы, в которых будут храниться счетчики, с
соответствующими правами (nobody:nobody). Не давать же nobody возможность
создавать файлы в этой директории!.
- новый формат использования в html-тексте
img
src="/server-cntr/path-info?face=facename_амперсенд_ndigit=n_амперсенд_fcount=n_амперсенд_trans где
- path-info - имя файла, счетчик которого надо вставить (раньше было
url=)
- face - имя шрифта (раньше было type=)
- ndigit - число цифр (раньше было length=)
- fcount - фиктивное значение счетчика (раньше было count=)
- trans - прозрачный фон
- Переменные для 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)
- Есть версия count.cgi на perl (требуется GD.pm and URI::URL (comes with
libwww) )
- Ручной доступ к базе данных счетчиков: countctl.pl (не
работает)
countctl.pl [ -cdrv URL ] filename -c добавить
URL -d удалить -r сбросить -s установить (берет с stdin или
запрашивает в диалоге) -v посмотреть без флагов выдает дамп всей БД в
формате: URL счетчик время-старта
- если надо, то очистка от старой версии (make clean)
- ./configure
- make
- make install (в /usr/local/apache), используется Layout Apache; нужны
права root; не портит старые файлы настройки и т.п. (но запихивает образцовый
сайт - свою документацию - в htdocs)
- 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 (выдать синтаксис командной строки)
- libexec
- man
- man1 (htpasswd.1, htdiggest.1, dbmmanage.1)
- man8 (httpd.8, ab.8, apachectl.8, logresolve.8, rotatelog.8, apxs.8)
- conf
- tables (табл перекодировки для Russian Apache)
- access.conf - ныне пуст
- httpd.conf - основной файл конфигурации
- magic - для модуля mod_mime_magic (анало команды file), не надо
реедактировать
- mime.types - не надо редактировать
- srm.conf - ныне пуст
- htdocs - пустой сервер предоставляет документацию по сервер
- cgi-bin
- icons - маленькие картинки
- include - (.h для компиляции динамически загружаемых модулей)
- logs
- proxy
- конфигурируем сервер (все что по умолчанию, особенно всякие глупости типа
имен файлов, не упоминается)
- 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 добавляем, чтобы
явно знать какой виртуальный хост обработал заявку - 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 со своего домена
- описание виртуальных хостов
- .htaccess в директориях
- линк
- конфигурация дополнительных модулей
- mod_cntr
- mod_charset (руссификация)
- включение кодировок и добавление алиасов mac (x-mac-cyrillic) и lat
(translit)
- дырки в firewall
- на входе в компьютер
- для диалапных клиентов
- для доступа извне
- позже разобраться
Тестируем работоспособность (здесь не нужен mod_rcs, вместо него работает
extra/mod_charset)(SPARC, Solaris 2.5, gcc 2.6.2):
- берем архив apache_1.3.4rusPL27.4 у Лехи, разархивируем его.
- сносим старый httpd
- выбираем новое место для сервера /usr/local/apache
- небольшие исправления:
- возвращаем обратно выдачу подробного сообщения об ошибке 500 в
src/main/http_protocol.c (ap_send_error_response). Ради усиления
безопасности вместо подробного сообщения выдавался совет обратиться к
администратору. К сожалению, тот же текст выдавется в случае использования
proxy и ошибке в имени хоста. Получать письмо от клиента каждый раз как он
ошибется в имени хоста - это перебор...
- в src/Configure.tmpl
- EXTRA_LIBS=-lc -lcrypt
- CC=cc
- OPTIM=-O (-O2 ведет к segmentation violation)
- RANLIB=touch (использование ranlib грохает ld)
- Rule SHARED_CORE=no
- Rule SHARED_CHAIN=no
- раскоментируем модули info, proxy, rewrite, auth_dbm, cern_meta,
expires, headers
- тащим webcounter (2.2.4 на 21 января 1999) - описан выше
- ./configure
- make (не забудь /usr/ccs/bin в PATH)
- make install (в /usr/local/apache), используется Layout Apache, а не GNU;
описан выше
-
конфигурируем сервер (все что по умолчанию, особенно всякие
глупости типа имен файлов, не упоминается)
- 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
- описание виртуальных хостов
- .htaccess в директориях
- линк
- конфигурация дополнительных модулей
- изменяем /etc/rc2.d/S99httpd, чтобы он запускал apachectl (start, stop,
restart)
- если не хватает дескрипторов файлов по умолчанию (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.
- задаем права на исполнение тех файлов в cgi-bin, которые нужны
- поменять в crontab процедуру регулярной очистки httpd на использование
apachectl
- когда все будет хорошо - удалить старый сервер
Конфигурация
Конфигурация сервера задается в файлах 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 применяются после
тех, которые снаружи):
- секция Directory (кроме регулярных выражений) и .htaccess (.htaccess
перебивает Directory, если разрешено AllowOverride)
- секция DirectoryMatch и Directory регулярные выражения
- секции Files и FilesMatch
- секции Location и LocationMatch
Права доступа, свойства объекта и где его взять
- DA allow from {host}
определяет с каких
адресов будет доступ к данной директории
- all - со всех
- доменное имя (м.б. частичное) - с тех хостов, имя которых заканчивается
на эту строку
- полный IP адре
- частичный IP адрес - первые 1, 2 или 3 байта IP адреса
- a.b.c.d/e.f.g.h - network/netmask пара
- 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}
определяет с каких
адресов не будет доступа к данно директор
- all - со всех
- доменное имя (м.б. частичное) - с тех хостов, имя которых заканчивается
на эту строк
- полный IP адре
- частичный IP адрес - первые 1, 2 или 3 байта IP адреса
- a.b.c.d/e.f.g.h - network/netmask пара
- 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 ...
определяет возможности
сервера в данно директор
- ALL (по умолчанию) - все кроме MultiView
- ExecCGI - разрешается выполнение CGI
- FollowSymLinks - ходить по символьным ссылка
- Includes - использовать SSI
- IncludesNOEXEC - использовать SSI, кроме exec и include CGI
- Indexes - генерировать листин директории, есл отсутствует файл
index.html
- MultiViews - определять представление ресурса в зависмости от
предпочтений клиента (тип носителя, язык, набор символов кодировка) (не надо
это включать)
- SymLinksIfOwnerMatch - следовать по символьным ссылкам, только есл
владелец целевого файла совпадает владельцем ссылки (а я-то, старый дурак,
думал, что владелец ссылки всегда root)
- DA order порядок
определяет очередность в которо
применяются директивы allow и deny
- deny,allow - перв применяются директивы deny, затем allow
(начальное состояние - доступ разрешен)
- allow,deny - перв применяются директивы allow, затем deny
(начальное состояние - запрещено)
- mutual-failure - доступ только с тех хостов, которые перечислены
в allow и не перечислены в deny
- DA require entity-name entity
entity...
како пользователь может иметь достуо к директор
- user {userid}
только пользователи с данными
имена
- group {group-name}
только пользователи из данной
групп
- 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
какую
информацию включать в конце документов, генерируемых сервером (например,
сообщений об ошибках)
- Off - никако
- On - имя сервера и версия П
- EMail - еще и почтовый адре администратора
- S ServerTokens Minimal|OS|Full
что сервер
сообщает о себе в заголовке Server: (примерный текст):
- Minimal - Server: Apache/1.3.0
- OS - Server: Apache/1.3.0 (Unix)
- 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, ссылающихся на этот же сервер
- On - использовать имя, определенное в ServerName и Port
- 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) определяет код
возврата:
- permanent - ресур перемещен навсегда (301)
- temp - ресурс перемещен временно (302)
- seeother - ресурс замещен (303)
- 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 и др.)
Безопасность
- 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 ... (оп сливаются с учетом знаков)
- FancyIndexing - делать красивый индекс ( возможность сортировки
по столбцам)
- IconHeight[=pixels]
- IconsAreLinks - для fancy indexing
- IconWidth[=pixels]
- NameWidth=[n | *] - ширина колонки (* - использовать длину самого
длинного имени файла)
- ScanHTMLTitles - вытаскивать описание файла из HTML-текста
(только fancy indexing)
- SuppressColumnSorting - имена колонок не будут вызывать
сортировку индекса при fancy indexing
- SuppressDescription - не включать колонк описанием файла при
fancy indexing
- SuppressHTMLPreamble - подавить вставку заголовка пере включением
файла, определенного по HeaderName
- SuppressLastModified - подавление колонки при fancy indexing
- 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 (если эта информация доступна).
- S ScriptLog filename - журнал ошибок
- S ScriptLogLength size - максимальный размер
журнала ошибок (по умолчанию - 10 МБ)
- S ScriptLogBuffer size - размер тела PUT или POST
(по умолчанию - 1024)
- SV SetEnv variable value - установка
переменных окружения перед запуском CGI
- SV PassEnv variable variable
...
передaча указанных переменных окружения на момент запуска httpd в CGI
или SSI
- SV UnsetEnv variable variable
...
удалить указанные переменные из окружения пере запуском CGI или SSI
- SSI: любой документ хендлером server-parsed (директива AddHandler и
AddType text/html для того же суффикса) будет обрабатываться модулем include
(необходимо установить опцию Includes для данно директории).
Коман
оформляются как SGML-комментарии: меньше!--#команда
{атрибут=значение} --больше команды:
- config - атрибуты:
- errmsg - текст сообщения, посылаемый клиенту в случае ошибк
разбора SSI
- sizefmt - формат размера файла
- bytes
- abbrev - в Kb или Mb
- timefmt - строка, которая используется strftime(3) при выдаче
дат
- echo - печать значен переменных, имена которых задаются в
атрибутах
- exec - выполнить команду или CGI скрипт (если нет опции
IncludesNOEXEC)
- cgi - имя CGI скрипта (если имя относительное, то относительно
текущего документа), должен лежать в допустимом месте. PATH_INFO и
QUERY_STRING наследуется из текущего документа. Include-переменные
добавляются к стандартному CGI-окружению. Если скрипт возвращает заголовок
Location:, то он преобразуется в HTML anchor.
- cmd - указанная команда выполняется, используя /bin/sh.
Include-переменные передаются в команду.
- fsize - печать размера файла
- file - имя файла (м.б. относительно текущего документа)
- virtual - URL (м.б. относительно текущего документа)
- flastmode - время последне модификации файла
- file - аналогично fsize
- virtual - аналогично fsize
- include - вставить текст другого документа или файла (можгут быть
вложенные include). Вставляемый файл контролируется на право доступа обычн
образом. Если в текуще директории действует опция IncludesNOEXEC, а
вставляемый документ содержит вызов CGI, то документ не вставляется.
- file - только относительно текущего документа (никаких
абсолютных имен или имен, начинающихся с ../)
- virtual - URL. Не может содержать схему или имя хоста. М.б.
относительно текущего документа. Может содержать query.
- printenv - печать всех определенных переменных окружения и их
значен
- set - установить значение переменной окружения
- var - имя переменно
- value - значение переменно
Дополнительные (к стандарту CGI) переменные окружения:
- DATE_GMT
- DATE_LOCAL
- DOCUMENT_NAME (имя файла без имен директории)
- DOCUMENT_URI (URL запрошенного (не текущего) документа)
- LAST_MODIFIED
Внутри строки, заключенной в кавычки в теле директивы SSI, происходит
подстановка перемнной ее значением как в shell. Условное выполнение
- меньше!--#if expr="test_condition"
--больше
- меньше!--#elif expr="test_condition"
--больше
- меньше!--#else --больше
- меньше!--#endif --больше
Тестовые условия (если строка2 заключена в слеши, то она интерпретируется
как регулярное выражение; "=" и "!=" имеет больший приоритет, чем
"_амперсенд__амперсенд_" и "||"; "!" - еще больший; все, что не является
переменной ил оператором, рассматривается как строка; строки могут быть
заключены в апострофы; если строка содержит пробелы, то она ДОЛЖНА быть
заключена в апострофы; две строки рядо конкатенируются через пробел):
- строка - истина, если строка не пуста
- строка1 = строка2
- строка1 != строка2
- строка1 меньше строка2
- строка1 меньше= строка2
- строка1 больше строка2
- строка1 больше= строка2
- (test_condition)
- ! test_condition
- test_condition1 _амперсенд__амперсенд_ test_condition2
- test_condition1 || test_condition2
- SVDA XBitHack status
статус влияет на обработку
файлов, имеющих MIME-тип text/html:
- off (по умолчанию)
- on - если файл имеет установленный x-бит для владельца, то он
рассматривается как server parsed
- full - так же как on, но проверяется x-бит для группы и есл установлен,
то посылается заголовок Last-modified date (в соответствии со времене
последне модификации файла). Это позволяет кешировать документ.
Карта, разбираемая сервером, (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 - значение переменной окружения. Наиболее часто используются (где взять весь список?)
- Referer - откуда была ссылка на документ
- User-agent - что сказал о себе броусер
- %h - имя удаленного хоста
- %a - адрес удаленного хоста
- %{имя-заголовка}i - значение заголовка запроса
- %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)
Занимается перекодированием с русского на русский из кодировки хранения в
кодировку пересылки (или из полученной от пользователя кодировки в кодировку
хранения).
Директивы
- определение кодировки и таблиц перекодировки
- SV CharsetDecl имя-кодировки ru [ S ] ( флаг S
подавляет выдачу charset=... клиенту)
- SV CharsetRecodeTable из-какой в-какую
имя-файла-с-таблицей [
имя-файла-с-обратной-таблицей ] (обратная таблица может
создаваться автоматически)
- SV CharsetWideRecodeTable из-какой в-какую
имя-файла-с-таблицей (для перекодировок из символа в строку:
например, для транслитерации)
- SVDLA CharsetAlias официальное-имя
синоним ... (определение синонимов для имени кодировки)
- определение кодировки хранения (HTML/CGI/SSI)
- SVDLA CharsetSourceEnc имя-кодировки
- SVDLA CharsetByExtension имя-кодировки
.ext1 ...
- SVDLA CharsetProcessType mime-type (какие типы
файлы надо обрабатывать; всегда обрабатываются - text/*)
- определение кодировки клиента
- явно (по HTTP-заголовкам Accept-Charset: или Accept:
text/x-cyrillic-...)
- SVDLA CharsetPriority имя-кодировки1 ...
(определение приоритета, если клиент задает несколько Accept, при равенстве
приоритетов - по порядку в описании)
- SVDLA CharsetBrokenAccept Agent-Substring
accept_charset_string (игнорировать данный загловок Accept от
данного клиента - использовать другия механизмы для определения типа
клиентской кодировки)
- 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)
- SVDLA CharsetDefault имя-кодировки (принимается в
качестве кодировки клиента, если все остальные способы не помогли)
- SVDLA CharsetByPort имя-кодировки номер-порта
- SVDLA CharsetAgent имя-кодировки шаблон ... (не
регулярные выражения, а просто подстроки)
- дополнительная обработка специфических случаев
- SVDLA AddHandler strip-meta-http .ext1 ...
(удалять теги "META HTTP-EQUIV=... charset=..." из HTML-файлов перед
передачей их клиенту; не очень хорошая идея - конфликтует с другими
обработчиками, но как еще бороться с FrontPage, который их вставляет, и
Netscape/IE, которые встретов такую строчку в HTML-коде, перестают обращать
внимание на HTTP-заголовок с правильно выставленным charset. Подробности здесь)
- SVDLA CharsetBadAgent шаблон ... (клиентским
программам, подпадающим под шаблон, не будет выдаваться строка
charset= в HTTP-заголовке Content-type)
- SVDLA CharsetErrReject On | Off (что делать, если
клиент запрашивает неизвестную кодировку в Accept/Accept-charset: выдавать
сообщение об ошибке или (по умолчанию) пытаться определить "более
правильную" кодировку)
- SVDLA CharsetUseMultiViews Off
- SVDLA CharsetRecodeHeaders Off (надеюсь, что в заголовках
русского текста не будет)
- SVDLA CharsetDisable On | Off (выключить работу
модуля для данного сервера/директории)
- SVDLA CharsetRecodeFilenames On | Off
(перекодировать имена файлов; по умолчанию включена!)
- SVDLA CharsetOverrideExpires On | Off (если включен
- по умолчанию - то заменять заголовки Expires:, сгенерированные другими
модулями на свои)
- SVDLA CharsetDisableForcedExpires On | Off (если
выключен - по умолчанию - то сервер выдает заголовок "Expires: 1 Jan 1970"
дабы документ не кешировался, если его кодировка определилась по User-Agent
или Accept-charset. Рекомендуется использовать для форм или frameset: иначе
Back будет возвращать на пустую форму)
- SVDLA CharsetRecodeMethodsIn метод1 ... (включить
обработку запроса для данного метода: GET, POST, PUT, ALL (по умолчанию),
NONE)
- SVDLA CharsetRecodeMethodsOut метод1 ... (включить
обработку ответа для данного метода: GET, POST, PUT, ALL (по умолчанию),
NONE)
- SVDLA CharsetRecodeMultipartForms On (надо выключить, если
клиент передает с помощью POST двоичные данные)
- SVDLA CharsetDisableAcceptCharset Off
- увеличение кешируемости
- SVDLA CharsetAutoRedirect - позволяет обеспечить кешируемость
документов с помощью автоматического перенаправления запроса на документ с
тем же содержимым, но с "жестким" определением кодировка (по порту, по имени
хоста, директории, а не User-Agent или Accept. Это обеспечивает кеширование,
но порождает лишний запрос. Проблемы также с директивой Redirect в случае с
определением кодировки по номеру порта (CharsetSoftRedirect,
CharsetSoftRedirectPermanent, CharsetSoftRedirectTemp).
- SVDLA CharsetNormalizeToURL
- SVDLA CharsetNormalizeTypes
- SVDLA CharsetRedirectFromOriginalURL
- 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 до перекодировки)
|
|