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

В этой статье я рассмотрю пример использования виртуальных хостов на базе имен для двух сайтов www.mysite1.ru и www.mysite2.net.

В примере используется CentOS 6.0 i386 и Apache 2.2.15.

1. Настройка Apache

Устанавливаем apache:

[root@localhost ~]# yum install httpd

Создаем директории для сайтов:

[root@localhost /]# mkdir -p /sites/{www.mysite1.ru,www.mysite2.net}/{logs,http,cgi-bin}

Открываем для редактирования  /etc/httpd/conf/httpd.conf, находим и раскомментируем в нем директиву NameVirtualHost. Этим действием мы включаем использование виртуальных хостов на базе имен на 80-ом порту. Если у сервера несколько IP-адресов вместо звездочки можно подставить IP-адрес с которого будут прослушиваться виртуальные хосты, точно такой же IP нужно добавить в описание виртуального хоста.

NameVirtualHost *:80

Первая запись виртуального хоста забирает на себя все запросы не подошедшие под директивы ServerName и SeverAlias описанные в последующих виртуальных хостах. Если клиент обращается к серверу по IP-адресу или по несуществующему имени он попадет на этот виртуальный хост. Добавляем пустое описание со стандартной директорией:

<VirtualHost *:80>
    ServerName Default
    DocumentRoot /var/www/html
</VirtualHost>

Добавляем описание виртуального хоста для сайта www.mysite1.ru

<VirtualHost *:80>
    ServerAdmin webmaster@mysite1.ru
    ServerName www.mysite1.ru
    ServerAlias mysite1.ru
    DocumentRoot /sites/www.mysite1.ru/html 
 
# Директория для CGI-скриптов
    ScriptAlias /cgi-bin/ "/sites/www.mysite1.ru/cgi-bin"
    <Location /cgi-bin>
        Options +ExecCGI
    </Location>
 
# Файлы логов
    ErrorLog /sites/www.mysite1.ru/logs/error_log
    CustomLog /sites/www.mysite1.ru/logs/access_log common
</VirtualHost>

Добавляем описание виртуального хоста для сайта www.mysite2.net

<VirtualHost *:80>
    ServerAdmin webmaster@mysite2.net
    DocumentRoot /sites/www.mysite2.net/html
    ServerName www.mysite2.net
    ServerAlias mysite2.net
 
# Директория для CGI-скриптов
    ScriptAlias /cgi-bin/ "/sites/www.mysite2.net/cgi-bin"
    <Location /cgi-bin>
        Options +ExecCGI
    </Location>
 
# Файлы логов
    ErrorLog /sites/www.mysite2.net/logs/error_log
    CustomLog /sites/www.mysite2.net/logs/access_log common
</VirtualHost>

Проверяем правильность конфигурационых файлов:

[root@localhost ~]# apachectl configtest
Syntax OK

И запускаем Apache:

[root@localhost ~]# service httpd start
Starting httpd:                                                 [  OK  ]

На этом конфигурирование можно считать завершенным.

2. Настройка SELinux

SELinux (Security-Enhanced Linux) – это система принудительного контроля доступа основанная на политиках. Использование SELinux дает более широкие возможности по ограничению работы приложений и создает более высокий уровень защищенности отдельных процессов по сравнению с базовой системой.

Мы создали новые отличающиеся от стандратных директории для сайтов и теперь им нужно присвоить новый защитный контент. В первую очередь понадобится утилита semanage, если сервер установлен в минимальной конфигурации то ее придется доставлять:

[root@localhost ~]# yum install policycoreutils-python

Создаем правила маркировки для новых директорий:

[root@localhost ~]# semanage fcontext --add --type httpd_sys_content_t '/sites(/.*)?'
[root@localhost ~]# semanage fcontext --add --type httpd_log_t '/sites/[^/]*/logs(/.*)?'
[root@localhost ~]# semanage fcontext --add --type httpd_sys_script_exec_t '/sites/[^/]*/cgi-bin(/.*)?'

Восстанавливаем защитный контекст:

[root@localhost ~]# restorecon -r -v /sites

На этом настройка SELinux завершена.

5 Коммент. : “Настройка NameVirtualHost”

  1. Федор пишет:

    1. А как сделать редирект на другой ip?
    То есть:
    при запросе на внешний ip и домен mail.mydomen.com, что бы он пере направлялся на 192.168.0.20
    при запросе на внешний ip и домен test.mydomen.com, что бы он пере направлялся на тестовый сайт на ip 192.168.0.30
    при запросе на внешний ip и домен mydomen.com:8080, что бы он пере направлялся на ip 192.168.0.40 и.т.д.

    2. Нормально ли будут отображаться сайты на tomcat и nginx при таком пере направлении?

  2. Федор пишет:

    Все, на надо, гугл помог.

  3. viktor пишет:

    другой вид редиректа R L

Трекбеки/Пинги

  1. Настройка одноуровневой иерархии PKI в Linux | Блог «Админа-Маньяка» - [...] Настройка Apache более подробна описана в статье “Настройка NameVirtualHost”. Создадим две символические ссылки. [root@ca_srv CA]# ln -s [...]
  2. Настройка Microsoft SSO на Apache | Блог «Админа-Маньяка» - [...] именованных виртуальных хостов описана в статье “Настройка NameVirtualHost на Apache”. <VirtualHost *:80> ServerAdmin admin@mydomain.local DocumentRoot [...]

Оставить комментарий