Для начала определимся что такое виртуальный сервер? Как и подразумевает слово "виртуальный", наш сервер не будет существовать физически, но пользователь будет считать, что он работает с реальным сервером.
Установка виртуального
Web-сервера Концепция виртуальных хостов позволяет 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 Если ваша система имеет только один IP-адрес,
доступ к основному серверу станет невозможным, то есть вы не сможете
использовать его напрямую. Можно основной сервер использовать в качестве
виртуального, что я и сделал в примере 1.1.: основной сервер www является
виртуальным. При наличии двух IP-адресов можно один присвоить основному серверу,
а другой - виртуальным. Apache позволяет использовать несколько доменных
имен для доступа к одному серверу: ServerAlias www.dhsilabs.com
www2.dhsilabs.com
Запросы, посланные по IP-адресам, которые
присвоены нашим виртуальным хостам, должны соответствовать одному из указанных
доменных имен. Чтобы зафиксировать запросы, не соответствующие ни одному их этих
имен, нужно с помощью опции default:* создать виртуальный хост, который будет
обслуживать такие запросы: <VitrualHost _default_:*>
Обратите внимание на то, что адреса
www.dhsilabs.com и lib.dhsilabs.com должны быть прописаны в DNS В директиве VirtualHost в качестве адресов можно
использовать доменные имена, но лучше указывать IP-адрес, причем действительный,
а не виртуальный. В этом случае вы не будете зависеть от DNS при резолвинге.
Также потребуется один IP-адрес для вашего основного сервера. Если распределить
все адреса между виртуальными серверами, то нельзя будет получить доступ к
основному серверу.
Пример 1.2. В приведенном примере сконфигурированы два
виртуальных сервера и идентификацией по IP-адресу. Один из них использует сам
IP-адрес, а другой - доменное имя, соответствующее IP-адресу. При конфигурировании виртуальных серверов можно
использовать опцию ExeсCGI, которая разрешает выполнение CGI-скриптов на
виртуальном сервере. Ниже приведен пример для почтового Web-интерфейса:
Пример 1.3. Подключение почтового Web-интерфейса
Рассмотрим конфигурирование виртуального
FTP-сервера на примере ProFTP. Демон proftpd позволяет обслуживать сразу
несколько FTP-узлов. Виртуальные FTP-узлы нужны когда мы, например, хотим
организовать несколько FTP-узлов - один для одной рабочей группы, другой - для
второй, в третий может быть анонимным и т.д. Настройка виртуального FTP-узла очень похожа на
настройку виртуального Web-сервера - даже используется та же директива
VirtualHost. Linux может поддерживать несколько Ip-адресов, благодаря чему мы
можем создать виртуальные узлы. Дополнительные IP-адреса, которыми вы
располагаете можно использоваться виртуальными узлами. При конфигурировании
виртуальных FTP-узлов каждому виртуальному узлу нужно присвоить отдельный
IP-адрес. Для конфигурирования виртуального FTP в файл
proftpd.conf нужно добавить директиву VirtualHost, содержащую IP-адрес. В блок VirtualHost можно другие вставить
директивы, например, директиву Anonymous, которая создаст гостевой узел. Можно
также задать каталог или порт.
Пример 2.1. В примере 2.1 приведена конфигурация
виртуального сервера ftp.library.com. В директиве VirtualHost используется
доменное имя, которое должно быть прописано в сервере DNS. IP-адрес
должен указывать на узел сети, на котором запущен демон proftpd. В конфигурации
2.1 также конфигурируются две анонимных учетных записи - library и ftp. Причем
учетная запись library требует ввода пароля при регистрации. Пароль должен
совпадать с паролем того пользователя, который запустил демон. Доступ к
виртуальному серверу разрешен только для нашей подсети (192.168.1.0). Записывать
данные на сервер может только пользователь libadmin.
Идентификация по имени
Идентификация по IP-адресу
Подключение
почтового интерфейса
Установка виртуального
FTP-сервера
Директивы файла конфигурации
FTP-сервера
Виртуальный HTTP-сервер
Виртуальные сервера с идентификацией по имени
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-адресу
<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>
# Файл 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-сервер
<VirtualHost 192.168.1.5>
ServerName "Virtual FTP Server"
</VirtualHost>
<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>
Директивы конфигурации сервера 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, <Global> |
| AllowGroup group_list | Разрешает доступ определенным группам. Используется в блоке Limit |
| AllowUser user_list | Разрешает доступ определенным группам. Используется в блоке Limit |
| AnonRequirePassword on | off | Требует пароль при анонимной регистрации. Пароль должен совпадать с паролем того пользователя, который запустил демон. По умолчанию опция выключена. |
| <Anonymous directory> | Создает анонимную учетную запись, 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 | Запрещает доступ определенным пользователям |
| <Directory> path | Используется в VirtualHost, Anonymous для того, чтобы определить особенные параметры доступа к каталогу и его подкаталогам |
| DisplayFirstChdir filename | Текстовый файл filename будет выводиться, когда пользователь впервые за время сеанса войдет в данный каталог. Используется в VirtualHost, Directory, Anonymous |
| DisplayLogin filename | Этот файл будет отображен, когда пользователь зарегистрируется |
| <Global> | Используется для задания параметров, которые будут использоваться как основным, так и всеми виртуальными серверами |
| <Limit command> | Ограничение на выполнение данной 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) |
| <VirtualHost address> | Создает виртуальный сервер |
По сравнению с демоном ProFTP, демон wu-ftp имеет не столь богатые возможности в конфигурировании и поддержке виртуальных узлов.
Поддержку виртуальных узлов можно включить командой virtual в файле конфигурации wu-ftp /etc/ftpaccess. virtual address Данная команда разрешает использование виртуального FTP-узла.
