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), каждая директива определяет поведение одного из модулей и имеет смысл только если этот модуль включен пр сборке.

Контексты:

Порядок применения директив определения свойств и прав доступа к объекту (все, кроме Directory, применются по порядку; Directory применяются от кратчайшего пути к само длинному; секции внутри VirtualHost применяются после тех, которые снаружи):

  1. секция Directory (кроме регулярных выражений) и .htaccess (.htaccess перебивает Directory, если разрешено AllowOverride)
  2. секция DirectoryMatch и Directory регулярные выражения
  3. секции Files и FilesMatch
  4. секции Location и LocationMatch

Права доступа, свойства объекта и где его взять

Общие характеристик сервера/виртуального сервера

Виртуальные сервера

Преобразование адресов

Преобразование http-заголовков (в стиле метафайла CERN и др.)

Безопасность

Индекс директории (автоматическая генерация, если отсутствует вручную сделанный индексный файл и разрешена Option Indexes)

Вызов CGI, SSI и т.п.

Карта, разбираемая сервером, (image map) не используется и не описывается (пусть разбор идет только на клиентской стороне).

Выдача информации о составе модуле сервера (mod_info):

Журналы (модуль mod_log_config; журнал ошибок конфигурируется другими средствами)

Каждый виртуальный сервер может вест ипроизвольное число журналов в различных форматах.

Директивы (рекомендуется использовать только LogFormat для определения формата и CustomLog для создания журнала)

Формат журнала: каждый запрос к сервер порождает строку в журнале, состоящую из слов (token), разделенных пробелами. Если слово пусто, то оно записывается как знак минус. Если слово содержит пробелы, то оно должно заключаться в кавычки( это надо само предусмотреть при задании формата). Пр задании формата используются литеральные символы, которые копируются в журнал директивы, которые начинаются со знака "процент" завершаются однобуквенным имене директивы. Между ними может стоять условие в виде списка кодов завершения через запятую (м.б. предваренных восклицательным знаком) - если условие не выполняется, то вместо token записывается минус. Директива в описании формата замещается соответствующим значением. Директивы:

Русификация (mod_charset)

Занимается перекодированием с русского на русский из кодировки хранения в кодировку пересылки (или из полученной от пользователя кодировки в кодировку хранения).

Директивы

Дополнительные переменные (для CGI, других модулей и SSI)