Russian description of configuration file. Общая структура файла конфигурации: [глобальные опции всего сервера, по одной на строке] Server server1 [опции для данного виртуального сервера] Alias /server_path1 local_path1 [опции для раздела N1 сервера] .... Alias /server_path2 local_path2 [опции для раздела N2 сервера] Server server2 [второй сервер и его опции] В конфигурации есть три контекста: глобальный, контекст сервера, контекст раздела. Изменение контекста происходит, когда встречается описание сервера (Server) или раздела (Alias). Для указания пробела внутри значения опции нужно использовать обратную черту: Mime text/plain;\ charset=windows-1251 txt Написание в кавычках _не_поддерживается_: Mime "text/plain; charset=windows-1251" txt Для продолжения длинной опции на другой строке, в конце строки нужно поставить обратную черту: Server site.ru www1.site.ru \ www2.site.ru Для значений опций размера можно использовать суффиксы: b - байты k или K - килобайты (1024 байта) M - мегабайты (1024 килобайта) G - гигабайты (1024 мегабайта) если нет суффикса, подразумеваются килобайты Для значений опций времени можно использовать суффиксы: s - секунды m - минуты h - часы d - дни W - недели M - месяцы (30 дней) Y - года (365 дней) если нет суффикса, подразумеваются секунды Для булевских значений можно использовать следующие обозначения: on, yes, true - опция включена off, no, false - опция выключена ------------------------------------------------------------------- +------------------------------------------------------------------ | Listen Адрес и порт, который нужно слушать; если указан только порт, то слушаются все интерфейсы. Может быть указано несколько директив Listen. Примеры: Listen 80 Listen 8080 Listen 11.22.33.44:80 Listen 11.22.33.44 80 +------------------------------------------------------------------ | Connections Максимальное количество одновременных соединений, при превышении клиенту выдается ошибка 503 Connections 1000 +------------------------------------------------------------------ | ProxyConnections Максимальное количество соединений с бекендами (независимо для каждого бекенда) ProxyConnections 100 +------------------------------------------------------------------ | ConnectionsPerIP Максимальное количество одновременных соединений с одного IP (полезно для защиты от DoS-атак с заполнением всего пула соединений с одного IP) ConnectionsPerIP 50 +------------------------------------------------------------------ | Timeout Максимальное время ожидания какой-либо активности соединения. Timeout 60 +------------------------------------------------------------------ | KeepAliveTimeout Максимальное время ожидания поступления запроса после установки соединения, а также следующего запроса при последовательных keep-alive запросах. KeepAliveTimeout 10 +------------------------------------------------------------------ | MaxBuffer Максимальный размер буфера, используемого при обработке запроса к бекенду. Если запрашивается больший файл, то 0W-httpd получает от бекенда блок данных размером MaxBuffer и ждет, пока клиент не заберет у 0W-httpd какую-то часть данных. Если файл меньше размера буфера, то 0W-httpd сразу полностью забирает файл у бекенда, не ожидая пока клиент получит файл. MaxBuffer 128k +------------------------------------------------------------------ | MaxPostSize Максимальный размер данных в POST-запросе. При получении POST-запроса 0W-httpd сначала полностью получает его от клиента и только потом передает запрос на бекенд. MaxPostSize 256k +------------------------------------------------------------------ | LowWatermark Поддержка Low Watermark (только для FreeBSD) Если определить ненулевое значение LowWatermark, то ядро будет запрашивать 0W-httpd о порции новых данных только тогда, когда в системном буфере освободится LowWatermark байт. Рекомендуется использовать совместно с опцией SendBuffer, устанавливая LowWatermark немного меньше, чем SendBuffer. Это уменьшает количество переключений между ядром и 0W-httpd, а также количество обращений к диску, повышая производительность 0W-httpd. По умолчанию поддержка выключена. Пример: LowWatermark 120k SendBuffer 128k +------------------------------------------------------------------ | SendBuffer Установка размера буфера вывода. По умолчанию используется системный размер буфера. Увеличение размера буфера уменьшает количество обращений к диску, повышая производительность 0W-httpd Пример: SendBuffer 128k +------------------------------------------------------------------ | DetachRoot Отказываться от root'овых прав после инициализации. Для того, чтобы 0W-httpd мог захватить 80 порт, ему нужны права root. Для этого 0W-httpd должен запускаться root'ом. Если бинарный файл отдать определенному пользователю (chown user:group 0W-httpd) и поставить suid-bit (chmod +s 0W-httpd, это делается при установке через "make install"), то 0W-httpd берет рутовые права (устанавливает эффективный UID) только на момент захвата порта. Однако реальный UID остается все равно root'овым, поэтому теоретически возможен remote-exploit с получением root'овых прав на сервере. Для того, чтобы 0W-httpd после инициализации совсем отказывался от рутовых прав и работал от имени того пользователя, которому принадлежит бинарник, опция DetachRoot должна быть включена (значение по умолчанию). Однако при этом теряется возможность захвата портов (до 1024) после инициализации. Это может потребоваться, если вы добавили новую директиву Listen и послали 0W-httpd сигнал USR1 - перечитать конфиг, а также после сигнала рестарта: HUP. Поэтому при включенной опции DetachRoot рекомендую запускать 0W-httpd с враппером (0W-httpd -w), чтобы при невозможности захвата порта 0W-httpd перезапустился DetachRoot on +------------------------------------------------------------------ | ServerTokens Указывать ли название и версию 0W-httpd в поле Server http-заголовков. Значения: off - не выдавать поле Server name - выдавать "Server: 0W" on - выдавать: "Server: 0W/версия" ServerTokens on +------------------------------------------------------------------ | Expires Установка поля Expires. Возможные значения: past - выдавать expires в прошлое (1 год) и дополнительные http-заголовки, запрещающие кеширование (Pragma: no-cache, Cache-control: no-cache); future - выдавать expires в будущее (1 год); [смещение] - выдавать expires относительно текущего времени можно использовать суффиксы времени. (может быть изменено для виртуальных серверов или отдельных разделов) Пример: Expires 7d - expires на 7 дней в будущее Expires -1M - expires на 1 месяц в прошлое +------------------------------------------------------------------ | Reverse Указание списка расширений, к которым применять их автоматическое преобразование на обратное. Полезно в том случае, если администраторы пользователей запрещают им скачивать файлы определенных расширений. Регистр значения не имеет. Формат: Reverse ext1 ext2 ... (может быть изменено для виртуальных серверов или отдельных разделов) Пример: если указать опцию Reverse mp3 avi mpg mpeg asf wmv mov то при наличии файла http://server.name/file.mp3 пользователь может запросить файл http://server.name/file.3pm и 0W-httpd ему отдаст file.mp3 +------------------------------------------------------------------ | KeepAlive Включить/выключить поддержку последовательных запросов в одном соединении (если сервер таков, что наверняка известно, что клиент сделает только один запрос к серверу, то лучше выключить, чтобы сервер попусту не держал открытым соединение KeepAliveTimeout секунд). (может быть изменено для виртуальных серверов или отдельных разделов) KeepAlive on +------------------------------------------------------------------ | ProxyKeepAlive Включить/выключить поддержку последовательных запросов в одном соединении с бекендом. Работа с бекендом идет по протоколу HTTP/1.0, поэтому соединение сохраняется только после тех ответов, у которых в заголовке задан размер (поле Content-Length). В конфигурации бекенда также нужно включить поддержку постоянных соединений (для Apache опция "KeepAlive On"). (может быть изменено для виртуальных серверов или отдельных разделов) ProxyKeepAlive on +------------------------------------------------------------------ | Log Уровень журналирования запросов (access.log): on - записывать все запросы errors - записывать только запросы, вызвавшие ошибки (status >= 400) off - не записывать ничего (может быть изменено для виртуальных серверов или отдельных разделов) Log on +------------------------------------------------------------------ | SkipWWW Отбрасывать префикс www. для всех виртуальных серверов. таким образом, можно не указывать в дополнительных именах сервера имя с www. (не рекомендуется устанавливать, есть пока непофиксенный побочный эффект c редиректами) SkipWWW off +------------------------------------------------------------------ | SkipPort отбрасывать указание порта для имен серверов; таким образом, сервера www.site.com и www.site.com:8080 считаются одним виртуальным сервером и обрабатываются одним блоком сервера www.site.com Если установить опцию в off, то нужно будет указывать дополнительные имена или заводить несколько виртуальных серверов: www.site.com и www.site.com:8080 (порт 80 отбрасывается всегда) (та же проблема с редиректами, если используются разные порты, лучше установить в off и явно указывать все имена) SkipPort on +------------------------------------------------------------------ | Listing Показывать листинг файлов в каталоге, если в каталоге нет индексного файла (показываются только первые 1024 файла) (может быть изменено для виртуальных серверов или отдельных разделов) Значения: off - не показывать on - показывать simple - показывать упрощенный листинг (только колонки размера и имён файлов, нет названий колонок со ссылками сортировки) Listing off +------------------------------------------------------------------ | Admin Email администратора, если его указать, он будет добавляться в сообщения об ошибках, генерируемых сервером (файл не найден, ошибка сервера и т.п.) Пример: Admin webmaster@site.ru +------------------------------------------------------------------ | FilesCheck При открытии статических файлов 0W-httpd использует пул открытых файлов. Для нескольких запросов одного файла файл открывается лишь один раз. При новом запросе проверяется, открыт ли этот файл, а также не был ли он изменен со времени последней проверки. Проверка на изменение делается не при каждом запросе, а с определенным периодом, который определяется опцией FilesCheck. Если файл был изменен, он открывается заново. FilesCheck 30s +------------------------------------------------------------------ | FilesKeep После закрытия последнего соединения, использующего файл, 0W-httpd не закрывает данный файл, а ждет некоторое время, определяемое опцией FilesKeep FilesKeep 10s +------------------------------------------------------------------ | Index Список индексных файлов, которые выдаются при запросе каталогов, таким образом запросы /dir/index.html и /dir/ эквивалентны; может быть изменено для виртуальных серверов или отдельных разделов. Пример: Index index.html index.htm поиск идет слева направо (если в каталоге есть и index.html и index.htm, то будет выдан index.html) +------------------------------------------------------------------ | Access Регулирование доступа Формат директивы запрета или разрешения доступа: Access ["deny"|"allow"] what [> redirect] [[,] ["deny"|"allow"] what] ... Тестирование ведется справа налево (и снизу вверх, если в одном контексте несколько директив Access), если ни одно из условий не выполнилось, то используется директива Access более высокого уровня (для раздела - виртуального сервера, для виртуального сервера - глобальный Access), если глобальной директивы Access нет, то доступ разрешен. Если есть глобальная директива Access, то проверка делается и сразу после установки соединения (до получения запроса), если доступ при этом не разрешен, то соединение сразу закрывается. what - одно из условий доступа: 1) * - все 2) CC - где CC - двухбуквенное обозначение страны клиента (определяется по IP-адресу, в каталоге conf должна присутствовать база по соответствию IP-диапазонов странам) 3) XX.XX.XX.XX - IP адрес 4) 192.168.0.0/16 192.168.* 192.168. - несколько вариантов записи сети IP-адресов 5) User:conf/passwd - доступ по паролю, User - это обозначение зоны доступа (realm), conf/passwd - файл с криптованными паролями, путь может быть абсолютным, если realm содержит пробел, его нужно писать через обратную черту: Site\ admin:/etc/httpd/passwd 6) referrer=value - ограничение доступа по полю referrer варианты значений: self: тот же сервер, к которому идет обращение foreign: referrer непустой и не тот, к которому идет обращение empty: пустое поле referrer server: определенный адрес сервера > redirect - вместо статуса 403 (Forbidden) делать редирект (302) на указанный адрес. Если адрес начинается 1) с http://, то делается редирект на указанный URL, 2) со слеша (/), то делается редирект на этот же виртуальный сервер и указанный файл. 3) иначе делается редирект относительно данного раздела (Alias) (пробелы вокруг '>' обязательны) делайте редирект только за пределы зоны ограничения, иначе будет циклический редирект, браузеры его могут и не отслеживать. Примеры: Разрешить доступ только из России и Украины: Access deny *, allow ru, allow ua Если подряд идет несколько последовательных условий allow или deny, то ключевое слово (allow|deny) можно указывать только первый раз, запятую тоже можно опускать: Access deny *, allow ru ua То же самое, но не выдавать ошибку 403 (Forbidden), а перенаправлять по адресу http://server-name/restricted.html Access deny * > /restricted.html, allow ru ua Перенаправить всех зарубежных пользователей с сайта site.ru на site.org по тому же адресу страницы: Server site.ru Alias / /site/ Access deny > http://site.org/, allow ru если адрес редиректа заканчивается слешом, то перенаправление делается на тот же адрес, что запрашивался, то есть: http://site.ru/dir/page.html перенаправляется на http://site.org/dir/page.html Разрешить доступ только с referrer'ом с сервера webwarper.net и со своего сервера (если referrer пуст или там белиберда, а не URL, то доступ разрешён): Access deny referrer=foreign, allow referrer=webwarper.net Предоставить доступ только пользователям с определенного IP или авторизованным по паролю пользователям: Access allow Site\ admin:conf/passwd, allow 217.16.19.218 (в отличие от других типов условий, на условии парольного доступа проверка всегда прерывается: либо пользователю дается доступ, либо запрашивается пароль) На всем сервере site.ru разрешить доступ только из интранет-сети (адреса 192.168.* и 10.*), а в каталог /pub/ пускать всех: Server site.ru Access deny *, allow 192.168.* 10.* Alias /pub/ /web/pub Access allow * +------------------------------------------------------------------ | Trusted Перечисление "своих" адресов, для которых не применяются различные ограничения на количество запросов (Antiflood и ConnectionsPerIP), Также при запросах с таких IP ретранслируется заголовок X-Real-IP, таким образом можно выстраивать цепочку из серверов, и последний из них получит в X-Real-IP оригинальный адрес. При использовании кеширования с Trusted-адресов позволяется удаление файлов из кеша и насильное обновление без ограничений по времени. Формат: Trusted [net|IP] [net|IP] ... +------------------------------------------------------------------ | Antiflood Защита от http-флуда (большого количества запросов с одного IP). Учитываются только те запросы, которые передаются на бекенды. Конфигурация осуществляется в два этапа: в глобальном контексте опция описывает параметры защиты, а в контексте виртуальных серверов и разделов можно только включать/выключать защиту для данного сервера или раздела. Формат: Antiflood requests=R [per=P] [deny=D] [on|off] где R - максимальное количество разрешенных запросов если 0 - защита выключена, по умолчанию - 0. P - учитываемый период запросов [умолчание - 30 минут]. D - время, на которое запрещается доступ после того, как с данного IP будет сделано больше R запросов за период P [умолчание - 60 минут]. значение on или off (по умолчанию: off) определяет, включать ли по умолчанию защиту. Если защита включена в глобальном контексте, то она по умолчанию включена для всех серверов, и для определенных серверов и/или разделов ее можно выключать опцией "Antiflood off". Если в глобальном контексте опция выключена, то нужно явно включать защиту для серверов или разделов опцией "Antiflood on" Пример: Antiflood requests=5000 per=30m deny=1h off Server one.ru ..... Server two.ru Antiflood on ... в данном случае разрешено выполнять 5000 запросов за 30 минут, если ограничение превышено, то доступ закрывается на 1 час, по умолчанию защита выключена, то есть для сервера one.ru ограничений нет, а для сервера two.ru защита включается для всех запросов, которые отправляются на бекенд. После превышения ограничения запрет действует на все запросы, а не только на запросы, отправляемые на бекенды. +------------------------------------------------------------------ | Cache и Cached Кеширование ответов в памяти. Кеширование может применяться только к статическим файлам и ответам от бекендов, кешируются только ответы со статусом 200, из ответов бекендов кешируются только те ответы, размер которых был известен на самое начало ответа (указан в HTTP-заголовке), из ответа бекенда сохраняются только следующие заголовки: Last-Modified, Expires, Content-type, Content-Encoding, остальные заголовки теряются (при первом запросе они отдаются клиенту, при последующих запросах из кеша - нет). Описание кеширования производится в два этапа, в глобальном контексте описывается один или несколько именованных кешей, а затем для нужных серверов или разделов назначается использование одного из ранее описанных кешей. Описание кеша: Cache [имя] [опции] "имя" необходимо для последующего назначения этого кеша, если имя не задано, используется имя "default". Список опций, все необязательные: size=РАЗМЕР - максимальный размер кеша в байтах, при превышении размера из кеша выталкиваются те ответы, которые давно не запрашивались клиентами [умолчание: 128M] max=РАЗМЕР - максимальный размер ответа [умолчание: 128k] age=СРОК - срок, в течение которого ответ может отдаваться из кеша, время его жизни в кеше [1h] minAge=СРОК - минимальное время жизни ответа в кеше, в течение этого времени сервером игнорируются пользовательские запросы на перезагрузку [5m] SkipQuery - отбрасывать параметры запроса при поиске ответа в кеше; при запросе site.ru/test?qwe будет выдан тот же ответ, что и при site.ru/test, если он уже есть в кеше [off] SkipHost - игнорировать имя виртуального сервера при поиске ответа в кеше, используется только путь к файлу [off] OnFault - специальный тип кеша, для которого ответы бекенда всегда записываются в кеш, но читаются из кеша только в случае недоступности бекенда. TrustedRefresh - при запросе с trusted-адресов автоматически обновлять элемент кеша. Ответ удаляется из кеша в следующих случаях: 1) если он давно не запрашивался, кеш заполнен и требуется место для нового ответа; 2) если истекло время его жизни, заданное в конфигурации кеша; 3) если истекло время, заданное в заголовке Expires; 4) если пользователь вызвал функцию безусловной перезагрузки (в MSIE: Ctrl-F5) Пример использования. В глобальном контексте задаем три разных кеша для картинок, файлов стилей и html-страниц: Cache images size=600M age=4h max=100k SkipQuery Cache css size=16M age=12h max=20k SkipQuery Cache pages size=128M age=1h Кеш картинок "images" размером 600Мb, время жизни в кеше - 4 часа, максимальный размер файлов в кеше - 100kb, игнорируется различие в параметрах запросов (query string). Кеш стилей "css" размером 10Mb, время жизни - 12 часов, максимальный размер файлов - 20kb, игнорируется различие в параметрах запросов. Кеш страниц "pages" размером 128Mb, время жизни - 1 час, страницы с различными параметрами кешируются отдельно. Теперь для нужных нам разделов включаем кеши: Server site.ru # запросы к разным статическим файлам не кешируются: Alias / /www/site Alias /|text/html,text/plain localhost:80 Cached pages Alias /|image /www/site Cached images Alias /|text/css /www/site Cached css В принципе, особой необходимости в кешировании статических файлов нет, операционная система их и так кеширует, дополнительное кеширование полезно разве что в том случае, если у вас очень много запросов к узкому кругу файлов, тогда можно немного сэкономить на запросах к системным функциям чтения файлов. Содержимое кеша можно посмотреть на странице статуса сервера, добавив параметр cache[=начало], может показываться не весь список, так как вся страница статуса ограничена размером 128kb. Например: http://site.ru/status?cache http://site.ru/status?cache=/images Удаление и обновление кеша: Ответы из кеша можно удалять с Trusted-адресов при запросе страницы статуса сервера с параметром cache-delete[=начало] при этом удалятся все ответы, кеш-адрес которых начинается со строки "начало", если строка не указана, удаляются все ответы. Например: http://site.ru/status?cache-delete=/css кеш-адрес - это тот адрес, который используется в кеше и показывается на странице /status?cache Если установлена опция SkipHost, то это адрес без имени сервера, если не установлена, то адрес с именем сервера, но без http:// Также с trusted-адресов можно насильно перезагружать один конкретный адрес кеша, добавляя в запрос поле: Cache-Control: no-cache (такое поле добавляется браузерами при насильной перезагрузке по Ctrl-F5 в MSIE, Ctrl-Shift-R в Firefox) и насильно удалять из кеша, добавляя поле: Cache-Control: no-store В случае удаления выдается ответ со статусом 204 "no content", тело ответа не выдается. Если данные поля есть в запросе не с trusted-адресов, то оба значения приводят к обновлению (не удалению) кеша только в том случае, если ответ находится в кеше больше MinAge секунд. +------------------------------------------------------------------ | ErrorPages Задание отдельных файлов для страниц ошибок, может использоваться в глобальном контексте или в контексте виртуального сервера. Задается путь к файлу ошибок и список кодов ошибок (через пробел), при которых будет использован файл, в имени файла можно использовать подстановку %d для кода ошибки. Если список ошибок не задан, то форматное имя файла будет использовано для всех ошибок 40x и 50x. Файл не может превышать 4kb и желательно быть больше 512 байт (если страница ошибки меньше 512 байт, то MSIE покажет свою собственную страницу ошибки, а не ту, которую выдал сервер). Пример: ErrorPages /path/to/site/errors/%d.html 403 404 503 +------------------------------------------------------------------ | Throttle Ограничение исходящего трафика, может использоваться только в контексте виртуального сервера. Параметр задает ограничение в байтах в секунду. Ограничение срабатывает только для больших файлов (которые не помещаются в одну операции отправки данных, обычно это около 32-128kb), мелкие ответы всегда отправляются без ограничений. Текущий алгоритм ограничения таков, что исходящий трафик может быть неравномерным, ограничение работает 5-секундным интервалами, за первую секунду сервер может отдать данные на полную полосу, затем 4 секунды выдавать очень небольшой поток. Если на сервере в основном большие файлы (больше 0.5-1Mb), то в _среднем_ ограничение соблюдается. Пример (ограничить трафик в 3Mbyte/sec): Throttle 3M +------------------------------------------------------------------ | Mime Список типов файлов по расширениям. Расширение учитывается только последнее (tar.gz указать нельзя) Для указания mime-типа по умолчанию используйте `*' Регистр расширений не имеет значения. (более полный список в примере конфиг-файла httpd.conf) Mime text/plain;\ charset=windows-1251 * Mime application/octet-stream gz tgz exe Mime application/x-shockwave-flash swf Mime application/zip zip Mime video/x-msvideo avi Mime audio/mpeg mp3 Mime text/css css Mime text/plain;\ charset=windows-1251 txt Mime text/html;\ charset=windows-1251 html htm Mime image/jpeg jpg jpeg Mime image/gif gif Список можно дополнять или изменять в описании виртуальных серверов, это полезно, например, для задания определенных кодировок текстов на определенных серверах, Например, в глобальном контексте задаем кодировку cp1251: Mime text/html;\ charset=windows-1251 html htm ... А для одного из серверов int.com задаем кодировку utf-8: Server int.com Mime text/html;\ charset=utf-8 html htm ... +------------------------------------------------------------------ | Server Описание виртуального сервера: Server name [name1 name2 ...] (name1, name2 - дополнительные имена сервера) Специальное имя сервера "*" обозначает любое имя, если нужного сервера не найдено по его имени, используется сервер "*" При включенной поддержке patterns можно использовать шаблонные имена серверов: * - любое количество любых символов, ? - любой символ, [abcd] - один из набора. Например: *.site.ru Если для сервера не определить разделов (Alias), то на обращения к серверу будет выдаваться ошибка 404 (not found) Опции после Server и перед первым Alias являются опциями сервера по умолчанию, изменяют глобальные умолчания и сами могут быть изменены в описании разделов (Alias). Можно использовать: Admin, Log, Index, KeepAlive, Listing, Filter, Access, Expires, Reverse +------------------------------------------------------------------ | Alias Список разделов сервера: Alias /server_path local_path Поиск соответствующего раздела ведется снизу вверх. localpath может быть одним из: 1) путь к статическим файлам (если начинается со слеша "/"): Alias / /usr/local/apache/data 2) http-редиректом (если начинается с http://): выполнится редирект (статус 301, Moved Permanently) http://server/old_stuff/123.html -> http://old.name/off.html?/123.html Alias /old_stuff/ http://old.name/off.html? 3) бекенд-сервер: IP:PORT/path или hostname:PORT/path 0W-httpd выступает в роли прокси-сервера (frontend, accelerator) можно указывать несколько бекендов, тогда запросы будут отправляться им по очереди (или если hostname резолвится в несколько IP). реальный IP клиента передается в поле X-Real-IP; если бекенд это Apache 1.3.x, то для его обработки есть модуль mod_realip (ftp://ftp.lexa.ru/pub/apache-rus/contrib/mod_realip-1.0.tar.gz) Alias / localhost:80 Alias / host1.site.ru:8080 host2.site.ru:8080 host3.site.ru:8080 Если перед адресом бекенда поставить знак "=", то 0W-httpd не будет передавать полученное от клиента поле Host на бекенд, а поставит в Host имя бекенда (или имя:порт, если порт бекенда не 80-ый). Оригинальное значение Host передается на бекенд в поле X-Host. Знак "=" должен быть написан вместе с именем бекенда, без пробела, пример: Alias / =back.site.ru:80 4) спец-обработчики: STATUS, EMPTY, PIXEL, STORAGE STATUS: Выдается текущее состояние сервера Alias /status STATUS EMPTY: на все запросы выдается файл нулевой длины, content-type выставляется в соответствии с расширением файла. существование файла не проверяется Alias /dummy EMPTY PIXEL: выдавать gif-картинку 1x1 (прозрачный gif) Alias /p.gif PIXEL при этом к картинке можно обращаться с параметром, обозначающем цвет: по запросу http://server.name/p.gif?0000FF будет выдан пиксел синего цвета PIXEL RRGGBB: выдавать gif-картинку 1x1 определенного цвета Alias /blue.gif PIXEL 0000FF STORAGE: обработка файлового хранилища, при котором доступ к файлам предоставляется только через специальный скрипт сайта. ------------------------------------------------------------------- Как это работает и зачем нужно. Допустим, у вас есть набор каких-то интересных пользователям файлов (видео, музыка, программы и т.п.), но вы не хотите, чтобы пользователи скачивали эти файлы напрямую, а хотите, чтобы они обязательно предварительно заходили на вашу страничку с кучей баннеров. Для этого вы организуете доступ к файлам следующим образом (например, сайт у вас называется site.ru, а расположен в каталоге /home/site/web) 1) каталог с этими ценными файлами: /home/site/web/files 2) каталог, в котором будут ссылки (sym-links) на эти файлы: /home/site/web/storage 3) какой-нибудь скрипт, который дает доступ к файлу: http://site.ru/file.php Допустим, есть файл с оригинальным названием cool_music.mp3, который хранится в реальном файле /home/site/web/files/2005/04/04/123.mp3 И для доступа к этому файлу пользователь должен открыть страницу http://site.ru/file.php?id=123 Что должен сделать скрипт: 1) он должен создать symlink в каталоге storage с каким-нибудь случайным именем, который будет указывать на реальный файл: symlink("../files/2005/04/04/123.mp3", "storage/123da71ee"); (путь дается относительно каталога storage) 2) дать пользователю следующую ссылку на файл: http://site.ru/storage/123da71ee/cool_music.mp3 Через какое-то время (например, через 2 часа) симлинк нужно удалить, например, из крона: */30 * * * * cd web/storage && find . -type l -mmin +120 | xargs -r rm В конфиге записывается: Alias /storage STORAGE /home/site/web/storage чтобы нельзя было открыть файл напрямую, доступ к /files закрывается: Alias /files /home/site/web/files Access deny * ------------------------------------------------------------------- В поле server_path можно использовать спец-символы, ограничивающие область server_path: Знак `$' для обозначения точного совпадения полезен, например, для редиректа только главной страницы сервера: Alias / /usr/local/apache/data Alias /$ http://rip.site/we-are-down.html Alias /index.html$ http://rip.site/we-are-down.html Знак `|' для обработки определенных типов файлов. Тип определяется по расширению запроса и списку Mime из конфига, для перечисления нескольких расширений использовать запятую. Также можно использовать лишь начало типа. Пример: обрабатывать картинки самому и устанавливать для них поле Expires в будущее, отсылать запросы страниц на бекенд, а статические файлы обрабатывать самому: Alias / /home/site/web Alias /|text/html,text/plain localhost:80 Alias /|image /home/site/web Expires future Знак `*' для обработки определенных расширений файлов (точнее, окончаний), для перечисления нескольких расширений использовать запятую (регистр не имеет значения) Пример: обрабатывать картинки самому, остальные запросы отправлять на бекенд: Alias / localhost:80 Alias /*.gif,.jpg,.png /usr/local/apache/data можно добавлять `*' у каждого расширения, если так удобнее: Alias /*.gif,*.jpg,*.png /usr/local/apache/data или наоборот: явно указывается, что html'и и запросы каталогов отправляются на бекенд, остальное - сами Alias / /usr/local/apache/data Alias /*.html,.htm,/ localhost:80 ------------------------------------------------------------------- В поле local_path можно использовать спец-символ `$', в этом случае для всех запросов данного Alias'а будет использован именно указанный local_path Пример: на любой запрос иконки отдавать одну и ту же иконку: Alias /*/favicon.ico /home/site/web/favicon.ico$ ------------------------------------------------------------------- После директивы Alias могут идти некоторые директивы, изменяющие глобальные настройки и настройки виртуального сервера и глобальные установки: Log, Index, KeepAlive, Listing, Access, Expires, Reverse. Например: Server www.dot.com dot.com Alias / /usr/local/apache/dot/data Alias /cgi-bin localhost:80/cgi-bin KeepAlive off Log on (обе последние директивы относятся к /cgi-bin)