Конфигурирование виртуальных HTTP и FTP-серверов
🕛 23.03.2009, 12:17
В статье пойдет речь о конфигурировании виртуальных HTTP- иFTP-серверов. В качестве HTTP сервера будет рассмотрен Apache, а
создание виртуального FTP-сервера будет происходить с использованием
FTP-сервера ProFTP.
Для начала определимся что такое виртуальный сервер? Как и
подразумевает слово «виртуальный», наш сервер не будет существовать
физически, но пользователь будет считать, что он работает с реальным
сервером. - Установка виртуального Web-сервера - Идентификация по имени - Идентификация по IP-адресу - Подключение почтового интерфейса - Установка виртуального FTP-сервера - Директивы файла конфигурации FTP-сервера
Виртуальный HTTP-сервер
Концепция виртуальных хостов позволяет Apache поддерживать несколько
Web-узлов. Получается, что один Web-сервер заменяет несколько и
пользователи видят отдельные Web-узлы. Это очень удобно, если нужно
организовать персональные Web-узлы пользователей или собственные
Web-узлы подразделений компании, например develop.mycompany.com
Apache можно настроить несколькими способами: чтобы запускался один
сервер, который будет прослушивать ВСЕ обращения к виртуальным
серверам, или запускать отдельный процесс для каждого виртуального
сервера. В первом случае один сервер будет одновременно обслуживать
все виртуальные. Если вас интересует такой вариант, нужно настраивать
виртуальные сервера с помощью директивы VirtualHost. Настройка
отдельны процессов для каждого сервера осуществляется с помощью
директивы Listen и BindAddress.
В статье я буду рассматривать именно первый случай. Внутри блока
директивы VirtualHost можно использовать любые директивы, кроме
ServerType, BindAddress, Listen, NameVirtualHost, ServerRoot,
TypesConfig, PidFile, MinRequestPerChild, MaxSpareServers,
MinSpareServers, так как некоторые из них относятся к основному
HTTP-серверу (например, ServerType), а некоторые - ко второму варианту
настройки виртуальных серверов и здесь неприемлемы. Обязательно должны
присутствовать директивы ServerName, DocumentRoot, ServerAdmin и
ErrorLog
В зависимости от версии и от настроек Apache виртуальные узлы могут
прописываться или в файле httpd.conf или в файле vhosts.conf
Виртуальные сервера можно идентифицировать по имени или по IP-адресу.
Виртуальные сервера с идентификацией по имени
Идентификация по имени имеет существенное преимущество перед
идентификацией по IP-адресу: вы не ограничены количеством адресов,
имеющемся у вас в распоряжении. Вы можете использовать любое
количество виртуальных серверов и при этом вам не потребуются
дополнительные адреса. Такое возможно благодаря использованию
протокола HTTP/1.1. Данный протокол поддерживается всеми современными
броузерами.
Поддержка виртуальных хостов обеспечивается директивами VirtualHost и
NameVirtualHost. Если ваша система имеет только один IP-адрес, его
нужно указать в директиве VirtualHost. Внутри блока директивы
VirtualHost записывается директива ServerName. Эта директива задает
доменное имя для нашего виртуального сервера. Это обязательно нужно
сделать, чтобы избежать поиска службой DNS - мы же не хотим, чтобы при
неудачном поиске виртуальный сервер был заблокирован? Все директивы
VirtualHost используют один и тот же IP-адрес, заданный директивой
NameVirtualHost. В блоке VirtualHost записываются параметры
виртуального сервера, причем они записываются для каждого виртуального
сервера отдельно.
Пример 1.1. Создадим два виртуальных сервера - www и lib
ServerName den.dhsilabs.com
<NameVirtulaHost 192.168.1.1>
<VirtualHost 192.168.1.1> ServerName www.dhsilabs.com ServerAdmin webmaster@den.dhsilabs.com DocumentRoot /var/httpd/www/html ErrorLog /var/https/www/logs/error.log TransferLog logs/access.log </VirtualHost>
<VirtualHost 192.168.1.1> ServerName lib.dhsilabs.com ServerAdmin webmaster@den.dhsilabs.com DocumentRoot /var/httpd/lib/html ErrorLog /var/https/lib/logs/error.log TransferLog logs/access.log </VirtualHost>
Если ваша система имеет только один IP-адрес, доступ к основному серверу станет невозможным,
то есть вы не сможете использовать его напрямую. Можно основной сервер использовать в качестве
виртуального, что я и сделал в примере 1.1.: основной сервер www является виртуальным. При наличии двух
IP-адресов можно один присвоить основному серверу, а другой - виртуальным.
Apache позволяет использовать несколько доменных имен для доступа к одному серверу:
ServerAlias www.dhsilabs.com www2.dhsilabs.com
Запросы, посланные по IP-адресам, которые присвоены нашим виртуальным хостам, должны соответствовать
одному из указанных доменных имен. Чтобы зафиксировать запросы, не соотвествующие ни одному их этих имен,
нужно с помощью опции default:* создать виртуальный хост, который будет обслуживать такие запросы:
<VitrualHost _default_:*>
Обратите внимание на то, что адреса www.dhsilabs.com и lib.dhsilabs.com должны быть
прописаны в DNS
Виртуальные сервера с идентификацией по IP-адресу
В директиве VirtualHost в качестве адресов можно использовать доменные имена, но лучше указывать IP-адрес,
причем действительный, а не виртуальный. В этом случае вы не будете зависеть от DNS при резолвинге. Также
потребуется один IP-адрес для вашего основного сервера. Если распределить все адреса между виртуальными
серверами, то нельзя будет получить доступ к основному серверу.
Пример 1.2.
<VitrualHost 192.168.1.2> ServerName www.dhsilabs.com ServerAdmin webmaster@den.dhsilabs.com DocumentRoot /var/httpd/www/html ErrorLog /var/https/www/logs/error.log </VirtualHost>
<VirtualHost lib.dhsilabs.com> ServerName lib.dhsilabs.com ServerAdmin webmaster@den.dhsilabs.com DocumentRoot /var/httpd/lib/html ErrorLog /var/https/lib/logs/error.log </VirtualHost>
В приведенном примере сконфигурированы два виртуальных сервера и идентификацией по IP-адресу. Один из
них использует сам IP-адрес, а другой - доменное имя, соответствующее IP-адресу.
При конфигурировании виртульных серверов можно использовать опцию ExeсCGI, которая разрешает
выполнение CGI-скриптов на виртуальном сервере. Ниже приведен пример для почтового Web-интерфейса:
Пример 1.3. Подключение почтового Web-интерфейса
# Файл httpd.conf
<Directory /home/httpd/mail> order deny,allow deny from all allow from localhost allow from 192.168 allow from 123.123.123.123 Options ExecCGI </Directory>
# Файл vhosts.conf
<VirtualHost 123.123.123.123> ServerAdmin webmaster@den.dhsilabs.com DocumentRoot /home/httpd/mail ServerPath /mail ServerName wwwmail.dhsilabs.com ErrorLog logs/error_log TransferLog logs/access_log ErrorDocument 403 http://www.dhsilabs.com/messages/error403.html </VirtualHost>
# Error 403 - доступ извне, то есть почтовый интерфейс будет доступен только
# из локальной сети
Виртуальный FTP-сервер
Рассмотрим конфигурирование виртуального FTP-сервера на примере ProFTP. Демон proftpd позволяет обслуживать
сразу несколько FTP-узлов. Виртуальные FTP-узлы нужны когда мы, например, хотим организовать несколько FTP-узлов один для одной рабочей группы, другой - для второй, в третий может быть анонимным и т.д.
Настройка виртуального FTP-узла очень похожа на настройку виртуального Web-сервера даже используется та же директива VirtualHost. Linux может поддерживать несколько Ip-адресов, благодаря чему
мы можем создать виртуальные узлы. Дополнительные IP-адреса, которыми вы располагаете можно использоваться
виртуальными узлами. При конфигурировании виртуальных FTP-узлов каждому виртуальному узлу нужно присвоить
отдельный IP-адрес.
Для конфигурирования виртуального FTP в файл proftpd.conf нужно добавить директиву VirtualHost, содержащую
IP-адрес.
<VirtualHost 192.168.1.5> ServerName "Virtual FTP Server" </VirtualHost>
В блок VirtualHost можно другие вставить директивы, например, директиву Anonymous, которая создаст
гостевой узел. Можно также задать каталог или порт.
Пример 2.1.
<VirtualHost ftp.library.com> ServerName "Online library" MaxClients 15 MaxLoginAttempts 1 DeferWelcome on <Limit LOGIN> Allow from 192.168.1 Deny from all </Limit>
<Limit WRITE> AllowUser libadmin DenyAll </Limit>
<Anonymous /var/ftp/library/books> User library Group library AnonRequirePassword on
<Anonymous /var/ftp/library> User ftp Group ftp UserAlias anonymous ftp </Anonymous> </VirtualHost>
В примере 2.1 приведена конфигурация виртуального сервера ftp.library.com. В директиве VirtualHost используется
доменное имя, которое должно быть прописано в сервере DNS. IP-адрес должен указывать на узел сети, на котором
запущен демон proftpd. В конфигурации 2.1 также конфигурируются две анонимных учетных записи - library и ftp. Причем
учетная запись library требует ввода пароля при регистрации. Пароль должен совпадать с паролем того пользователя,
который запустил демон. Доступ к виртуальному серверу разрешен только для нашей подсети (192.168.1.0). Записывать
данные на сервер может только пользователь libadmin.
Директивы конфигурации сервера ProFTP
AccessGrantMsg message
Ответное сообщение, которое будет отправлено пользователю в случае
его регистрации или получения анонимного доступа. Символы %u будут заменены
на имя пользователя, которое он ввел при регистрации.
Allow from all | host | network [,host | network[, ...]]
Используется внутри блока Limit. Ограничивает доступ к серверу (а именно
разрешает доступ). По умолчанию allow from all
AllowAll
Разрашает доступ к блокам Directory, Anonymous, Limit
AllowForeignAddress on | off
Разрешает клиенту указывать при соединении соединения адрес, который
не соответствует ему. По умолчанию off. Может использоваться в блоках VirtualHost,
Anonymous,
AllowGroup group_list
Разрешает доступ определенным группам. Используется в блоке Limit
AllowUser user_list
Разрешает доступ определенным группам. Используется в блоке Limit
AnonRequirePassword on | off
Требует пароль при анонимной регистрации. Пароль должен совпадать с
паролем того пользователя, который запустил демон. По умолчанию опция выключена.
Создает анонимную учетную запись, directory - корневой каталог анонимного
сервера.
AuthGroupFile path
Позволяет указать путь к альтернативному файлу group. По умолчанию
используется файл /etc/group
AuthUserFile path
Указывает альтернативный файл passwd
Bind address
Разрешает привязку дополнительного IP-адреса к основному или виртуальному
хосту.
DefaultRoot directory
Задает корневой каталог по умолчанию
Deny from all | host | network
Запрещает доступ к серверу. Блок Limit
DenyAll
Запрещает анонимным пользователям доступ к объектам, указанным в блоке Limit
DenyUser user_list
Запрещает доступ определенным пользователям
path
Используется в VirtualHost, Anonymous для того, чтобы определить особенные
параметры доступа к каталогу и его подкаталогам
DisplayFirstChdir filename
Текстовый файл filename будет выводиться, когда пользователь впервые
за время сеанса войдет в данный каталог. Используется в VirtualHost, Directory,
Anonymous
DisplayLogin filename
Этот файл будет отображен, когда пользователь зарегистрируется
Используется для задания параметров, которые будут использоваться как
основным, так и всеми виртуальными серверами
Ограничение на выполнение данной FTP-команды, например LOGIN, WRITE
MaxClients number | none | message
Ограничение на количество клиентов. Message будет отображено, если
пользователю будет отказано в доступе. Блоки Anonymous, Global
MaxLoginAttempts
Максимальное количество попыток зарегистрироваться. По умолчанию 3.
Блоки VirtualHost, Global
Order allow, deny | deny, allow
Порядок выполнения директив Allow и Deny в блоке Limit
PersistentPassword on | off
При значении on будут использованы системные файлы /etc/passwd и /etc/group,
несмотря на то, что командой chroot корневой каталог был изменен.
RequireValidShell on | off
Разрешает или запрещает регистрацию при использовании оболочек (shells),
которые не указаны в файле /etc/shells
ServerAdmin email
Определяет email администратора сервера.
ServerType
Определяет режим работы сервера standalone (по умолчанию) или inetd.
В первом случае сервер будет запускаться автоматически из стартовых сценариев
системы, во втором - его будет запускать сервер inetd при попытке соединения.
TimeoutIdle seconds
Время в секундах, в течение которого пользователь имеет право не проявить
активности. По умолчанию 60 (1 минута).
User username
Имя пользователя, присвоенное демону ProFTP
UserAlias Alias User
Создает псевдоним (alias) для пользователя (user)
Создает виртуальный сервер