HTTP СЕРВЕР APACHE
Ссылки:
- основной сервер "фонда apache"
- русификация сервера
- news
- модули для apache
- еженедельник
- Apache и SSL
Распространение и использование - бесплатное.
Рабочая лошадка 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)
- czech
- russian
- russian2
- access.conf - ныне пуст
- httpd.conf - основной файл конфигурации
- magic - для модуля mod_mime_magic (анало команды file), не надо реедактировать
- mime.types - не надо редактировать
- srm.conf - ныне пуст
- htdocs - пустой сервер предоставляет документацию по сервер
- manual
- images
- misc
- mod
- vhosts
- cgi-bin
- printenv
- test-cgi
- icons - маленькие картинки
- include - (.h для компиляции динамически загружаемых модулей)
- xml
- 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 в директориях
- линк
- share
- cgi-bin
- icons
- htdocs
- конфигурация дополнительных модулей
- mod_cntr
- mod_charset (руссификация)
- включение кодировок и добавление алиасов mac (x-mac-cyrillic) и lat (translit)
- дырки в firewall
- на входе в компьютер
- для диалапных клиентов
- для доступа извне
- позже разобраться
- DSO
- suexec
- perl
- php3
Тестируем работоспособность (здесь не нужен 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 в директориях
- линк
- share
- cgi-bin
- icons
- htdocs
- var
- log
- proxy
- конфигурация дополнительных модулей
- mod_cntr
- mod_charset
- изменяем /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 и др.)
- 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 однобуквенный-код-и-число-секунд
ко
- M - время последне модификации файла
- 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 ... (оп сливаются с учетом знаков)
- 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 до перекодировки)