Для расположения на одном физическом сервере множества сайтов с разными доменными именами в 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”
Трекбеки/Пинги
- Настройка одноуровневой иерархии PKI в Linux | Блог «Админа-Маньяка» - [...] Настройка Apache более подробна описана в статье “Настройка NameVirtualHost”. Создадим две символические ссылки. [root@ca_srv CA]# ln -s [...]
- Настройка Microsoft SSO на Apache | Блог «Админа-Маньяка» - [...] именованных виртуальных хостов описана в статье “Настройка NameVirtualHost на Apache”. <VirtualHost *:80> ServerAdmin admin@mydomain.local DocumentRoot [...]
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 при таком пере направлении?
Все, на надо, гугл помог.
другой вид редиректа R L
Для информации: http://centos.name/?page/howto/Https
И ещё: http://centos.name/?page/tipsandtricks/ApacheVhostDefault