Apache

_
 * Создание виртхостов можно использовать mod_vhos_alias
 * Favicon
 * Ротация лог-файлов
 * ab
 * .htpasswd
 * .htaccess - настройка basic-авторизации
 * Документация по версии 1.3

Документация поставляется вместе с сервером и находится в HTML-формате тут grep -rl NameVirtualHost /usr/local/share/doc/apache22

Версия 1.3 и вся ветка 1.х с 2010 более не поддерживается, рекомендовано переходить на 2.2 с модулем Apache MPM prefork

Установка 2.4.6
make config-recursive install clean -С /usr/ports/apache24/
 * [v]SUEXEC

Основной выбор, как я понимаю, между. Первое это повторяет концепию 1.3
 * MPM_PREFORK (по умолчанию и оставил)
 * MPM_WORKER
 * MPM_EVENT

Появляются конфигурационные диалоги
 * диалог perl появляется. - не трогал.
 * диалог m4 - не трогал
 * libiconv - не трогал.
 * apr (что это?)
 * python

Потом еще раз показывает диалог апача и после этого начинает.

===> Cleaning for expat-2.1.0 ===> Cleaning for apr-1.4.8.1.5.2 ===> Cleaning for gdbm-1.10 ===> Cleaning for db42-4.2.52_5 ===> Cleaning for apache24-2.4.6

Установка 2.2
В порте Apache 2.2 mod_ssl по умолчанию содержится. make config-recursive install clean -C /usr/ports/www/apache22-worker-mpm/ make config-recursive install clean -C /usr/ports/www/apache22-peruser-mpm/ Отобразится диалог выбора параметров Остальное не читал.
 * mpm это Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server that handles requests in a manner similar to Apache 1.3.
 * peruser это замена suphp, но не получилось заставить работать. В итоге ставил обычный apache22. Ниже описаны злоключения именно с peruser.
 * Убрать
 * ipv6

Надо выставить установку по умолчанию - иначе потом нужно будет действия соврешать в:
 * диалог perl появляется. - не трогал.
 * диалог m4 - не трогал
 * libiconv - не трогал.
 * apr ??? - снял ipv6
 * python- снял ipv6

echo 'apache22_enable="YES"' >> /etc/rc.conf

/usr/local/etc/rc.d/apache22 start Performing sanity check on apache22 configuration: httpd: Could not reliably determine the server's fully qualified domain name, using nonename.com for ServerName Syntax OK Starting apache22. httpd: Could not reliably determine the server's fully qualified domain name, using nonename.com for ServerName

Сервер запускается при этом, но не функционирует(!?!) Порт открыввает, но ничего нет. Лог до уровня debug, смена ip, портов, отключение всех модулей - запускается, но не работает.

sockstat -4|grep http root    httpd      19530 3  tcp4 6 *:80                  *:* root    httpd      19530 4  tcp4   *:*                   *:*

Комментирование модуля uniq, загрузка модуля ядра и прочее - не помогает. Пересборка с отключением ipv6 все равно запускает

Возможно дело в том, что несколько интерфейсов

/usr/local/sbin/httpd [Tue Jul 05 22:07:27 2011] [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter [Tue Jul 05 22:07:27 2011] [warn] pid file /var/run/httpd.pid overwritten -- Unclean shutdown of previous Apache run?

/usr/local/sbin/httpd --help (13)Permission denied: make_sock: could not bind to address 89.250.8.14:80 no listening sockets available, shutting down Unable to open logs

AcceptFilter http none в httpd.conf позволяет убрать ошибку No such file or directory: Failed to enable the 'httpready' Accept Filter

/usr/local/sbin/apachectl -k start

The -DNOHTTPACCEPT disables an AcceptFilter. It is a kernel module for, IIRC, having the kernel accept the connection before handing it off to Apache (a speed optimization).

This directive enables operating system specific optimizations for a listening socket by the Protocol type. The basic premise is for the kernel to not send a socket to the server process until either data is received or an entire HTTP Request is buffered. Only FreeBSD's Accept Filters and Linux's more primitive TCP_DEFER_ACCEPT are currently supported.

The default values on FreeBSD are:

AcceptFilter http httpready AcceptFilter https dataready

http://httpd.apache.org/docs/2.2/mod/core.html#acceptfilter

e: Как проверить работает ли ACCF_HTTP? - В server-status должны практически пропасть состояния R.

make deinstall -C /usr/ports/www/apache22-peruser-mpm/ Останется конфиг, логи.

Чтобы можно было работать, указывая localhost в адресной строке браузера, надо добавить в конфигурационный файл VirtualHost соответствующий.  ServerName localhost 
 * localhost

Настройка
Активация автоматического запуска при старте системы echo 'apache_enable="YES"' >> /etc/rc.conf Запуск в текущей сессии /usr/local/etc/rc.d/apache start Performing sanity check on apache configuration: Syntax OK Starting apache.

Писать можно в конфиг или .htaccess index.php по умолчанию. изменить, добавив  DirectoryIndex index.html index.php 
 * Индексный файл по умолчанию

Options -indexes будет выводить Forbidden
 * Запрет листинга

а можно mod_autoindex выключить и тогда будет выводить ошибку Not Found при запросе директории.

Конфигурационный файл
Чтобы сделать более читаемым, можно вынести что-то в отдельные файла. Также можно убрать комментарии. Если они нужны, то примеры и описания можно найти в access.conf-dist, лежащем в той же директории. grep -v # /usr/local/etc/apache/httpd.conf > /usr/local/etc/apache/httpd.conf.wocomments && cd /usr/local/etc/apache/ mv httpd.conf httpd.conf.bak && mv httpd.conf.wocomments httpd.conf

Убрать пустые строки, а также ненужные директивы ServerAdmin you@your.address


 * В случае php как cgi, убрать весь контейнер  (18dd в vi)
 * Весь  (37dd)
 * Из  убрать icons и manual (оставив только имеющее отношение к cgi-bin)
 * Изменить ServerSignature Off
 * Убрать 

Управление
Перезагрузка apachectl restart

Проблемы
При заходе по доменному имени, которое не прописано явно в конфигурационном файле (в блоке VirtualHost) и если указывается путь с директорией без слэша, например,http://nonename.com/folder, то перебрасывает на dummy-host.example.com.

Ограничения на доступ
Корень у каждого хоста - запретить доступ отовсюду (всех мест) Deny from all

 AllowOverride None Order deny,allow Deny from all 

Запрет отдавать файлы определенного типа  Order allow,deny Deny from all </Files>