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):

  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)  
    • 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
  10. конфигурируем сервер (все что по умолчанию, особенно всякие глупости типа имен файлов, не упоминается)
    • 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)
  11. дырки в firewall
    • на входе в компьютер
    • для диалапных клиентов
    • для доступа извне
  12. позже разобраться
    • DSO
    • suexec
    • perl
    • php3

Тестируем работоспособность (здесь не нужен 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. небольшие исправления:
    • возвращаем обратно выдачу подробного сообщения об ошибке 500 в src/main/http_protocol.c (ap_send_error_response). Ради усиления безопасности вместо подробного сообщения выдавался совет обратиться к администратору. К сожалению, тот же текст выдавется в случае использования proxy и ошибке в имени хоста. Получать письмо от клиента каждый раз как он ошибется в имени хоста - это перебор...
  5. в 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
  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. конфигурируем сервер (все что по умолчанию, особенно всякие глупости типа имен файлов, не упоминается)

    • 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
  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}
    определяет с каких адресов будет доступ к данной директории
    • 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 до перекодировки)



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости