27.7. Apache HTTP сервер
Пред. | Глава 27. Сетевые серверы | След.

## 27.7. Apache HTTP сервер

Предоставил Murray Stokely.

### 27.7.1. Обзор

FreeBSD используется в качестве платформы для многих из самых нагруженных серверов в мире. Большинство серверов в интернет используют Apache HTTP сервер. Пакеты Apache должны быть включены в поставку FreeBSD. Если вы не установили их во вместе с системой, воспользуйтесь портами `www/apache13` или `www/apache22`.

Как только Apache был успешно установлен, его необходимо настроить.

### Примечание:

В этом разделе рассказывается о версии 1.3.X Apache HTTP сервера, поскольку эта версия наиболее широко используется в FreeBSD. Apache 2.X содержит много новых технологий, но здесь они не обсуждаются. За дополнительной информацией о Apache 2.X, обращайтесь к http://httpd.apache.org/.

### 27.7.2. Настройка

В FreeBSD основной файл настройки Apache HTTP сервера устанавливается в `/usr/local/etc/apache/httpd.conf`. Это обычный текстовый UNIX® файл настройки с строками комментариев, начинающимися с символа `#`. Исчерпывающее описание всех возможных параметров настройки находится за пределом рассмотрения этой книги, поэтому здесь будут описаны только наиболее часто модифицируемые директивы.

`ServerRoot "/usr/local"`

  Указывает верхний каталог установки Apache по умолчанию. Бинарные файлы находятся в `bin` и `sbin`, подкаталоги расположены относительно корневого каталога сервера, файлы настройки находятся в `etc/apache`.

`ServerAdmin you@your.address`

  Адрес, на который должны будут отправляться сообщения о проблемах с сервером. Этот адрес выводится на некоторые генерируемые сервером страницы, например с сообщениями об ошибках.

`ServerName www.example.com`

  `ServerName` позволяет вам устанавливать имя хоста, которое отправляется обратно клиентам, если оно отличается от того, с которым настроен хост (например, использование `www` вместо реального имени хоста).

`DocumentRoot "/usr/local/www/data"`

  `DocumentRoot`: Каталог, внутри которого будут храниться документы. По умолчанию, все запросы обрабатываются внутри этого каталога, но символические ссылки и синонимы могут использоваться для указания на другие каталоги.

Хорошей идеей будет сделать резервные копии настроек Apache перед внесением изменений. Как только вы будете удовлетворены первоначальной настройкой, можно запускать Apache.

### 27.7.3. Запуск Apache

Apache не запускается из inetd, как это делают многие другие сетевые серверы. Он настроен для автономного запуска, чтобы обеспечивать большую производительность при обработке HTTP запросов от браузеров клиентов. Для упрощения запуска, остановки и перезапуска сервера существует shell скрипт. Для запуска Apache в первый раз просто выполните:

`#` `/usr/local/sbin/apachectl start`

Вы можете остановить сервер в любой момент, выполнив:

`#` `/usr/local/sbin/apachectl stop`

После внесения любых изменений в файл настроек, вам потребуется перезапустить сервер:

`#` `/usr/local/sbin/apachectl restart`

Для перезапуска Apache без прерывания имеющихся соединений, выполните:

`#` `/usr/local/sbin/apachectl graceful`

Дополнительная информация находится на странице справочного руководства apachectl(8).

Для запуска Apache при старте системы, добавьте в `/etc/rc.conf` следующую строку:

apache_enable="YES"

или для Apache 2.2:

apache22_enable="YES"

Если вы хотите передать программе Apache `httpd` дополнительные параметры командной при загрузке системы, они могут быть помещены в дополнительную строку `rc.conf`:

apache_flags=""

Теперь, когда веб сервер запущен, вы можете просмотреть свой веб сайт, задав в строке браузера адрес `http://localhost/`. По умолчанию отображается веб страница `/usr/local/www/data/index.html`.

### 27.7.4. Виртуальный хостинг

Apache поддерживает два различных типа виртуального хостинга (Virtual Hosting). Первый метод основан на именах (Name-based Virtual Hosting). Он использует полученные от клиента заголовки HTTP/1.1 для определения имени хоста. Это позволяет многим различным доменам использовать один и тот же IP адрес.

Для настройки Apache на использование этого типа хостинга добавьте в `httpd.conf` запись подобную следующей:

NameVirtualHost *

Если веб сервер назывался `www.domain.tld` и вы хотите настроить виртуальный домен для `www.someotherdomain.tld`, необходимо добавить в `httpd.conf` следующие записи:

<VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain.tld </VirtualHost> <VirtualHost *> ServerName www.someotherdomain.tld DocumentRoot /www/someotherdomain.tld </VirtualHost>

Замените адреса и пути к документам на те, что вы будете использовать.

За дополнительной информацией по настройке виртуальных хостов обращайтесь к официальной документации Apache: http://httpd.apache.org/docs/vhosts/.

### 27.7.5. Модули Apache

Существуют множество различных модулей Apache, которые добавляют функциональность к основному серверу. Коллекция портов FreeBSD предоставляет простой способ установки Apache с некоторыми наиболее популярными дополнительными модулями.

#### 27.7.5.1. mod_ssl

Модуль mod_ssl использует библиотеку OpenSSL для сильной криптографии через протоколы Secure Sockets Layer (SSL v2/v3) и Transport Layer Security (TLS v1). Этот модуль содержит все необходимое для запроса подписанного сертификата из центра сертификации для защищенного веб сервера на FreeBSD.

Если вы еще не установили Apache, версия Apache 1.3.X с mod_ssl может быть установлена через порт `www/apache13-modssl`. Поддержка SSL также доступна для Apache 2.X через порт `www/apache22`, где она включена по умолчанию.

#### 27.7.5.2. Apache и скриптовые языки

Для большинства скриптовых языков созданы модули Apache. На базе таких модулей возможно создание других модулей Apache, написанных полностью на скриптовом языке. Они также часто используются как встроенные в сервер интерпретаторы, что исключает накладные расходы на запуск внешнего интерпретатора и сокращает время построения динамических страниц.

### 27.7.6. Построение динамических сайтов

В последнее десятилетие все большее число компаний обращает внимание на Интернет как площадку для ведения и расширения бизнеса. Среди прочего, этот процесс подчеркивает потребность в интерактивном содержимом сайтов. Некоторые компании, такие как Microsoft®, представляют свои закрытые решения; сообщество разработчиков открытых программ отвечает на вызов. Среди современных решений для предоставления динамического контента следует отметить Django, Ruby on Rails, mod_perl и mod_php.

#### 27.7.6.1. Django

Django — это распространяемая под лицензией BSD инфраструктура, позволяющая разработчикам быстро создавать элегантные, высокопроизводительные веб-приложения. Она предоставляет в распоряжение разработчика объектно-реляционное отображение (object-relational mapper), таким образом типы данных разрабатываются как объекты Python. Для этих объектов предоставляется богатый интерфейс доступа к базам данных, при этом у разработчика не возникает необходимости написания SQL-запросов. Django также предоставляет расширяемую систему шаблонов, так что логика приложения отделена от его HTML-представления.

Для Django требуются следующие компоненты: mod_python, Apache и одна из нескольких возможных SQL СУБД. Укажите соответствующие опции сборки, и порт установит всё необходимое.

Пример 27.3. Установка Django совместно с Apache2, mod_python3 и PostgreSQL
`#` `cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL`

После установки Django и всех необходимых ему компонентов вам потребуется создать каталог для проекта Django. Далее потребуется настроить Apache для определенных URL адресов на вашем сайте выполнять ваше приложение встроенным интерпретатором Python.

Пример 27.4. Конфигурация Apache для Django/mod_python

Чтобы настроить Apache отправлять запросы для определенных URL адресов вашему веб-приложению, вам потребуется внести несколько строк в конфигурационный файл `httpd.conf`:

<Location "/"> SetHandler python-program PythonPath "['/dir/to/your/django/packages/'] + sys.path" PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonAutoReload On PythonDebug On </Location>

#### 27.7.6.2. Ruby on Rails

Ruby on Rails это еще одна веб инфраструктура с открытым исходным кодом, которая предоставляет полный стек разработки и которая оптимизированa для продуктивного и быстрого создания мощных веб-приложений. Ruby on Rails может быть легко установлена из коллекции портов.

`#` `cd /usr/ports/www/rubygem-rails; make all install clean`

#### 27.7.6.3. mod_perl

Проект интеграции Apache/Perl объединяет мощь языка программирования Perl и HTTP сервера Apache. С модулем mod_perl возможно написание модулей Apache полностью на Perl. Кроме того, постоянно запущенный встроенный в сервер интерпретатор позволяет не тратить ресурсы на запуск внешнего интерпретатора и время на запуск Perl.

mod_perl можно использовать различными способами. Помните, что mod_perl 1.0 работает только с Apache 1.3, тогда как mod_perl 2.0 совместим только с Apache 2.X. mod_perl 1.0 доступен как порт `www/mod_perl`, а также в виде статически скомпилированной версии в `www/apache13-modperl`. mod_perl 2.0 доступен как `www/mod_perl2`.

#### 27.7.6.4. mod_php

Написал Tom Rhodes.

PHP, также известный как «Препроцессор гипертекста» («Hypertext Preprocessor»), — это скриптовый язык общего назначения, в основном предназначенный для веб разработки. Этот язык может быть встроен в HTML, его синтаксис заимствован из C, Java™ и Perl, и он позволяет веб разработчикам быстро писать динамически генерируемые страницы.

Добавление поддержки PHP5 к веб серверу Apache производится путем установки порта `lang/mod_php5`.

Если порт `lang/php5` устанавливается впервые, то автоматически отобразятся все доступные опции (`OPTIONS`). Если меню не отображается, так как порт `lang/php5` устанавливался ранее, всегда можно повторно вызвать диалог меню выполнив следующую команду в каталоге порта:

`#` `make config`

Выберите в меню опцию `APACHE`, тем самым вы построите загружаемый модуль mod_php5 для веб сервера Apache.

### Примечание:

Множество сайтов по разным причинам (например, из-за проблем совместимости или из-за наличия уже развёрнутых веб приложений) всё еще используют PHP4. Если требуется mod_php4 вместо mod_php5, то воспользуйтесь портом `lang/php4`. Порт `lang/php4` поддерживает многие из конфигурационных и установочных опций порта `lang/php5`.

Этот порт устанавливает и настраивает модули, необходимые для поддержки динамических PHP веб страниц. Убедитесь, что в файл `/usr/local/etc/apache/httpd.conf` были добавлены следующие секции:

LoadModule php5_module libexec/apache/libphp5.so
AddModule mod_php5.c <IfModule mod_php5.c> DirectoryIndex index.php index.html </IfModule> <IfModule mod_php5.c> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps </IfModule>

Для загрузки модуля PHP после этого просто вызовите команду `apachectl` с параметром graceful:

`#` `apachectl graceful`

При дальнейших обновлениях PHP команда `make config` больше не потребуется; выбранные опции сохраняются автоматически инфраструктурой портов FreeBSD

Поддержка PHP в FreeBSD построена по модульному принципу, поэтому базовая установка обладает очень ограниченной функциональностью. Дополнительная функциональность может быть легко добавлена при помощи порта `lang/php5-extensions`, управляющего набором расширений PHP через меню, либо просто путем установки дополнительных портов.

Например, для добавления поддержки MySQL к PHP5, просто установите порт `databases/php5-mysql`.

После установки новых расширений сервер Apache должен быть рестартован, чтобы изменения в конфигурации вступили в силу:

`#` `apachectl graceful`

Пред. | Наверх | След.
27.6. Domain Name System (DNS) | Начало | 27.8. Файл сервер и печать для Microsoft® Windows® клиентов (Samba)

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.