В этой статье я покажу вам, как можно настроить Apache, что бы на одном IP адресе работало несколько сайтов, делается это очень просто, добавлением виртуальных хостов в апач.
Для этого нужно:
1) Создать папки для сайтов, например в директории /var/www, создадим 2 папки – site1.loc и site2.loc
mkdir /var/www/site1.loc mkdir /var/www/site2.loc
Создадим в этих папках файлы index.html (sudo nano /var/www/site1.loc/index.html) с примерно таким содержанием:
<html> <head> <title>site1.loc</title> </head> <body> <h1>this is site1</h1> </body> </html>
Изменим владельца папок на пользователя Apache:
sudo chown -R www-data:www-data /var/www/*
И зададим необходимые разрешения на эти папки:
Sudo chmod –R 664 /var/www/*
После этого нужно добавить виртуальные сайты в Apache:
sudo nano /etc/apache2/sites-enabled/site1.loc.conf
В нем нужно написать строчки:
<VirtualHost *:80> ServerAdmin [email protected] ServerName site1.loc ServerAlias www.site1.loc DocumentRoot /var/www/site1.loc/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
И нужно добавить файл для второго сайта – site2.loc.conf, содержание будет такое же как и для первого, только за место site1 нужно везде вписать site2.
После этого перезапускаем апач:
/etc/init.d/apache2 restart
Если он перезапустился, то можно проверить его работу, добавляем на компьютере в файл hosts адрес сервера с привязкой к сайтам, и удостоверяемся, что откроется правильный сайт.
Видео по теме
Веб-сервер может обслуживать большое количество сайтов. На одном веб-сервере может быть тысячи сайтов — самое главное, чтобы потянуло железо.
На своём домашнем локальном веб-сервере вы также можете разметить любое количество сайтов: для тестирования различных CMS, различных дизайнов, просто разные проекты.
Сайты в разных папках
Самый простой способ — это создать несколько папок и в каждой из них разместить отдельный сайт. К примеру, корневой папкой вашего сервера является c:Serverdatahtdocs, следовательно, содержимое этой папки доступно по адресу http://localhost/. Если вы создадите подпапки c:Serverdatahtdocssite1 и c:Serverdatahtdocssite2, то они будут доступны по адресам, соответственно, http://localhost/site1 и http://localhost/site2
И так вы можете делать с любым количеством сайтов и папок, в том числе вложенных подпапок. Главное достоинство этого способа — простота, ведь не требуется никакая дополнительная настройка.
Виртуальные хосты
По большому счёту, этот способ в целом похож на первый — сайты также размещаются в различных папках. Но отличается тем, по какому адресу они открываются в веб-браузере. Например, можно настроить компьютер и веб-сервертак, что сайты будут открываться по адресам вида http://site1, http://site2 и тому подобное.
Подробности о настройки виртуальных хостов в Windows здесь, а также в статье Виртуальные хосты Apache.
Связанные статьи:
- Виртуальные хосты Apache (100%)
- Виртуальный хост Apache по умолчанию. _default_ и catch-all в Apache (100%)
- Apache для Windows (53.5%)
- Как запустить Apache на Windows (53.5%)
- Документация по Apache на русском языке (53.5%)
- Как обновить PHP (RANDOM — 50%)
Содержание
- 1 Дано
- 2 Задача
- 3 Решение
- 3.1 Создаём два сайта (виртуальные хосты)
- 3.2 Создаём ссылки с нескольких DNS адресов на один сайт
- 3.3 Ограничиваем доступ к сайтам
- 3.3.1 файл .htaccess
- 3.3.1.1 Пример
- 3.3.2 директива <Directory>
- 3.3.2.1 Пример
- 3.3.3 Итог
- 3.3.1 файл .htaccess
- 3.4 Последние штрихи
- 4 Приложение
- 4.1 Особенности директив Listen и NameVirtualHost
- 4.2 См. также
Эта инструкция основана на статье «Многоликий Apache» из журнала «Системный администратор» №12, 2005г. (http://samag.ru)
Установив, веб-сервер Apache и предоставив через него на всеобщее обозрение свой сайт, некоторые и не подозревают, каким мощным инструментом они владеют. С его помощью можно управлять сотнями сайтов с разными именами и уровнями доступа. Денежная стоимость и временные затраты на добавление каждого сайта минимальны.
Веб-сервер Apache, популярный благодаря своей прозрачности для программистов и администраторов и не в последнюю очередь благодаря бесплатности, реализован под все более-менее популярные операционные системы. Его настройки для всех ОС одинаковы, различаются только пути, где хранятся конфигурационные файлы. На одном сервере может быть запущено несколько экземпляров Apache, прослушивающих разные адреса и/или порты. Один экземпляр может обслуживать несколько сайтов (подробнее об этом ниже). Проект настолько популярен, что постоянно обрастает новой функциональностью. О степени популярности можно судить либо по статистике, что, на мой взгляд, довольно опрометчиво, либо по конкретным фактам. Фактов популярности Apache мы приведём два. Во-первых, его наличие в качестве веб-сервера по умолчанию в большинстве UNIX-подобных операционных систем. Во-вторых, такой гигант в области ИТ как компания Oracle приняла его в состав своего продукта Oracle Application Server 10g, где он играет одну из ключевых ролей.
Дано
- Компьютер с установленным пакетом Apache 1.3 или 2.0
- Адрес сервера в интернете: 10.0.10.15 и имя: teo.mynetwork.ru
- Адрес сервера в локальной сети: 192.168.100.18
- Несколько сайтов.
- Несколько имён для одного сайта
Задача
- Разместить все сайты на одном сервере
- Сделать доступ к каждому сайту по отдельному URL
- Ограничить доступ к некоторым сайтам
- Сделать перенаправление нескольких имён на один сайт
Решение
Создаём два сайта (виртуальные хосты)
Предположим, что у нас два различных сайта teo.mynetwork.ru и logos.mynetwork.ru. Эти имена должны быть доступны, т.е. держатель зоны mynetwork.ru должен прописать в ней узлы teo и logos
— Для каждого сайта создаём каталог в корневом каталоге документов Apache (teo и logos, соответственно). Для некоторых Linux по умолчанию /var/www/html, но чтобы убедиться, где он расположен на нашем сервере, смотрим значение директивы DocumentRoot в /etc/httpd/conf/httpd.conf. Итак, создаём:
# mkdir /var/www/html/teo /var/www/html/logos
— Мы будем разделять журналы для каждого сайта, поэтому создадим соответствующие каталоги:
# mkdir /var/log/httpd/teo /var/log/httpd/logos
— Если у нас уже был создан сайт, то всё его содержимое переносим в созданный для него каталог, т.е. из /var/www/html в /var/www/html/teo. Новый сайт logos.mynetwork.ru размещаем в /var/www/html/logos.
Теперь настраиваем Apache. Добавляем в конец файла /etc/httpd/conf/httpd.conf (некоторые ОС создают для каждого виртуального хоста отдельный конфигурационный файл, тог):
NameVirtualHost 10.0.10.15 <VirtualHost teo.mynetwork.ru> DocumentRoot /var/www/html/teo ServerName teo.mynetwork.ru ErrorLog /var/log/httpd/teo/error_log CustomLog /var/log/httpd/teo/access_log combined </VirtualHost> <VirtualHost logos.mynetwork.ru> DocumentRoot /var/www/html/logos ServerName logos.mynetwork.ru ErrorLog /var/log/httpd/logos/error_log CustomLog /var/log/httpd/logos/access_log combined </VirtualHost>
Все настройки не заданные для сайта явным образом в директиве VirtualHost, наследуются от глобальных настроек Apache, указанных выше в этом же файле.
— Перезапускаем Apache:
# /etc/init.d/httpd restart
— Теперь, обращаясь по DNS именам, мы будем получать разные сайты. Если обратиться по IP адресу, то получим сайт teo.mynetwork.ru, т.к. он подключен первым.
Создаём ссылки с нескольких DNS адресов на один сайт
Это можно осуществить двумя способами: созданием синонимов, или перенаправлением всех обращений с другого сайта.
1) Синонимы задаются директивой ServerAlias, могут содержать маску, и разделяются пробелом. Вот несколько примеров создания синонимов:
ServerAlias www.teo.mynetwork.ru ServerAlias *.teo.mynetwork.ru ServerAlias www.teo.mynetwork.ru god.mynetwork.ru pantheon.ru
Синоним — это DNS-имя. Имена могут быть абсолютно любыми, в том числе и из разных доменов, но все они должны разрешаться в IP-адреса, то есть их предварительно нужно зарегистрировать в DNS.
2) Перенаправление задаётся директивой Redirect. Создаём новый пустой сайт pantheon.ru. Как и для предыдущих сайтов, это делается в три шага: создание каталога для документов, для журналов и добавление конфигурации в httpd.conf:
<VirtualHost pantheon.ru> DocumentRoot /var/www/html/pantheon ServerName pantheon.ru ErrorLog /var/log/httpd/pantheon/error_log CustomLog /var/log/httpd/pantheon/access_log combined Redirect / http://teo.mynetwork.ru </VirtualHost>
Можно перенаправлять не со всего сайта, а только с определённого каталога или даже документа:
Redirect /samag http://samag.ru Redirect /ftp/ ftp://citkit.ru/pub/ Redirect /find/ya.htm http://yandex.ru
При этом Apache воспринимает первый параметр директивы Redirect не как URL, а как набор символов, при совпадении с которым происходит перенаправление. Отсюда следует, что он НЕ проверяет наличие указанных каталогов и файлов, а ссылки /samag и /samag/ НЕ считает одинаковыми.
Перенаправление с помощью файла .htaccess выглядит так:
RewriteEngine On RewriteRule ^wiki/(.*)$ http://new.site.ru/wiki/$1 [R=permanent,L] RewriteRule ^(.*)$ http://new.site.ru/ [R=permanent,L]
- 1-я строка: включаем возможность менять URL
- 2-я строка: перенаправляем запрос к странице http://old.site.ru/wiki/Что-то на другой сайт, передавая параметры ($1)
- 3-я строка: любые другие запросы к старому сайту перенаправляем на новый.
Полезная ссылка:
- http://www.portlet.ru/articles/webtips/redirect.html
Ограничиваем доступ к сайтам
Теперь, если пользователь обратится к нам по IP-адресу, либо по имени, на которые наш сервер откликается (см. Приложение), то Apache сначала определяет, не удовлетворяет ли запрос описанным директивами VirtualHost сайтам и если не находит ни один из них, то выдаёт сайт по умолчанию, который находится в каталоге, заданном глобальной директивой DocumentRoot, т.е. уровнем выше остальных. Таким образом, получается, что пользователь может попасть на любой из виртуальных сайтов не тем путём, какой мы для него приготовили, т.е. http://logos.mynetwork.ru/. Например, набрав в адресной строке браузера «http://192.168.100.18/logos/», он получит сайт logos.mynetwork.ru. Правда в этом случае документы, использующие ссылки на ресурсы этого же сайта, будут некорректно отображаться, потому что ссылки делаются относительно корня сайта и, если это была ссылка /img/picture.jpg, то во втором случае этот же файл уже нужно искать по ссылке /logos/img/picture.jpg, этого же браузер не знает. Таким образом, здесь все зависит от того, догадывается ли пользователь, в каких каталогах мы храним наши сайты. В принципе, в этом нет ничего плохого, ведь мы в любом случае выложили сайты, чтобы их посещали (правила по ограничению доступа к ресурсу всё равно будут действовать, о них мы поговорим чуть позже), но как-то это выглядит не красиво (для того и двери, чтоб в окна не лазить). Чтобы устранить эту некрасивость можно поместить сайт по умолчанию на тот же уровень, что и остальные сайты, т.е. создать каталог /var/www/html/default и указать его в двух директивах глобальных настроек (т.е. до описания виртуальных сайтов)
DocumentRoot "/var/www/html/default" ... # This should be changed to whatever you set DocumentRoot to. <Directory "/var/www/html/default">
Теперь перейдём непосредственно к раздаче прав доступа. Существует два способа указания прав доступа к каталогу веб-сайта средствами Apache:
1) поместить в каталог файл .htaccess,
2) использовать директиву <Directory> в файле конфигурации.
В обоих случаях правила распространяются и на вложенные каталоги. Мы рассмотрим оба способа и изменим права доступа к двум каталогам сайта logos.
файл .htaccess
Какие параметры можно переписать в файлах .htaccess определяется директивой AllowOverride. Для разрешения переопределения всех деректив нужно добавить в конфигурацию сайта строку:
AllowOverride All
Перечислим преимущества использования файла .htaccess:
- при его изменении не нужно перезапускать Apache;
- при одинаковом уровне доступа к разным ресурсам можно пользоваться ссылками на один файл .htaccess;
- можно предоставить пользователю право редактирования этого файла, что удобно, если у нас сервер с множеством клиентских сайтов.
Есть и недостатки:
- для того, чтобы ответить на вопрос: «какие ограничения доступа существуют на сайте?» — администратору необходимо помнить, в каких каталогах лежат эти файлы и ссылки;
- если сайт будет переноситься на другой сервер, и, что очень вероятно, будет размещён в другом каталоге, то для корректировки ссылок уйдёт много времени;
- повышается нагрузка сервера, т.к. при каждом запросе на ресурс он обращается к .htaccess в этом каталоге и всех верхних по иерархии, наследуя их настройки т.е. запрос на ресурс http://teo.mynetwork.ru/olimp/staff/zeus.htm инициирует проверку .htaccess файлов в каталогах
-
- ./
- ./olimp/
- ./olimp/staff/
Пример
Предоставим права с помощью файлов .htaccess, нужно создать соответственно файл /var/www/html/logos/info1/.htaccess:
Options +Indexes Order deny,allow Deny from all Allow from 192.168.100.11 Allow from 192.168.100.17
и файл /var/www/html/logos/info2/.htaccess:
AuthType Basic AuthName "Boss" AuthUserFile "/var/www/main_users" Require valid-user
директива <Directory>
Определяя настройки доступа к каталогам сайта с помощью директивы <Directory> в одном конфигурационном файле всего сайта, мы получим следующие преимущества:
- можно быть уверенным, что ничего не пропустим, если вдруг нужно изменить уровень доступа к какому-нибудь ресурсу;
- повышаем скорость реакции сервера на запросы, т.к. все настройки загружаются при старте Apache.
Ну а мириться придётся с тем, что для каждого каталога необходимо описывать права отдельно (помним, что для подкаталогов права наследуются), даже если они одинаковые. Правда, есть поддержка масок, например:
<Directory ~ "^/www/.*/[0-9]{3}">
будет соответствовать именам каталогов в /www/ состоящим из трёх цифр, но это не всегда может облегчить ситуацию.
Пример
Описываем те же права в главном конфигурационном файле Apache httpd.conf или в файле настройки виртуального хоста:
<VirtualHost logos.mynetwork.ru> DocumentRoot /var/www/html/logos ServerName logos.mynetwork.ru ErrorLog /var/log/httpd/logos/error_log CustomLog /var/log/httpd/logos/access_log combined <Directory /var/www/html/logos/info1> Options +Indexes Order deny,allow Deny from all Allow from 192.168.100.11 Allow from 192.168.100.17 </Directory> <Directory /var/www/html/logos/info2> AuthType Basic AuthName "Boss" AuthUserFile "/var/www/main_users" Require valid-user </Directory> </VirtualHost>
Итог
Оба варианта настройки равноправны и создают следующие ограничения:
Доступ к ресурсу http://logos.mynetwork.ru/info1/ смогут получить только два пользователя из локальной сети с указанными IP адресами (хотя такие ресурсы лучше хранить на внутренних веб-серверах), ещё мы дали разрешение Apache, в случае отсутствия в каталоге начальной страницы, генерировать html документ с содержимым каталога.
Для доступа к ресурсу http://logos.mynetwork.ru/info2/ будут запрошены имя пользователя и пароль, которые будут сверены с данными в файле /var/www/main_users. Создадим этот файл:
# touch /var/www/main_users # chown root.webmaster /var/www/main_users
Добавим в него пользователя chef:
# /usr/bin/htpasswd2 /var/www/main_users chef
В некоторых дистрибутивах команда может называться без цифры, т.е. htpasswd, находится она в пакете с утилитами Apache, в Debian это apache2-utils
Остальных пользователей добавляем аналогичным способом. Такие файлы создаём для каждой группы пользователей с одинаковыми правами доступа к ресурсу. Одни и те же группы можно использовать во всех сайтах.
Для удаления пользователя chef из списка, используем комманду:
# /usr/bin/htpasswd2 -D /var/www/main_users chef
— Если возникли проблемы, то смотрим в логах /var/log/apache2/error_log. Можно их сделать более детальными указав в /etc/httpd/conf/httpd.conf или в конфигурации определённого виртуального хоста:
LogLevel debug
Последние штрихи
В заключении можно для изящности выделить настройку каждого сайта в отдельный файл, и подключить их в httpd.conf:
Include /etc/httpd/conf/vhosts/teo.conf Include /etc/httpd/conf/vhosts/logos.conf Include /etc/httpd/conf/vhosts/pantheon.conf
Кроме изящности мы получаем удобство в быстром подключении и отключении сайта, путём добавления/снятия символа комментария “#” в начале строки. Это особенно актуально, когда настройка каждого сайта раздувается на несколько десятков строк.
Также нелишне будет настроить ротацию журналов с помощью logrotate.
Приложение
Особенности директив Listen и NameVirtualHost
Директива Listen имеет больший приоритет чем, NameVirtualHost. Она говорит, откуда принимать запросы. В то время как последняя определяет, как обрабатывать полученный запрос. Это значит, что если указано значение
Listen 80
то Apache будет прослушивать порт 80 на всех IP адресах и директива
NameVirtualHost 10.0.10.15
не ограничивает запросы, пришедшие на другие адреса, и они будут обрабатываться наравне с указанным адресом, а если указано значение
Listen 10.0.10.15:80
то
NameVirtualHost 192.168.100.18
не возымеет действия, и сайт будет не доступен из локальной сети.
См. также
- Apache — общие вопросы, небольшие заметки, работа над ошибками.
Время прочтения
5 мин
Просмотры 20K
При миграции сервера в облако возникла необходимость разместить несколько веб-сайтов, работающих по HTTPS на одном физическом IP-адресе.
При этом нужно было остаться на той же операционной системе CentOS 5.6 и штатном apache-2.2.19.
Готового решения для CentOS не нашел, поэтому предлагаю свой вариант решения.
Теория
Согласно RFC 4366, раздел 3.1. Server Name Indication это возможно.
Для полноценной работы это расширение должен поддерживать и сервер и клиент (браузер).
Практика
Поддержка расширения SNI согласно Wikipedia появилась в Apache HTTP Server начиная с версии 2.2.12.
Подробности есть в Apache Wiki.
Для работы расширения нужна библиотека OpenSSL версии 0.9.8f или выше.
Проблема в том, что в CentOS 5.6 встроен OpenSSL версии 0.9.8e, и «поднять» ему версию не так то просто, т.к. именно на эту версию завязано много других компонент.
Собирать отдельный OpenSSL и Apache вне дерева пакетов — неспортивно.
В процессе поиска решения наткнулся на альтернативу: библиотеку gnutls и модуль mod_gnutls.
Библиотека gnutls в системе тоже присутствует и тоже очень старая, правда достаточно безболезненно удаляется вместе с зависимостями.
В результате были собраны и установлены «свежие» пакеты gnutls и mod_gnutls, которые дали нужный функционал с минимальным влиянием на остальную систему. Под катом подробности по процессу сборки и примеры файлов конфигурации.
Сборка пакетов
Для сборки понадобятся *-devel пакеты из штатных репозитариев, список нужных пакетов приводить не буду.
- Из комплекта Fedora Core 15 (Fedora Mirror List) взял пакеты:
libtasn1-2.7-2.fc15.src.rpm
gnutls-2.10.5-1.fc15.src.rpm - С домашней страницы проекта (mod_gnutls) взял актуальную версию исходных кодов модуля.
- Установил пакеты исходных кодов (ключ —nomd5 нужен, если cpio ругается на несовпадение md5, т.к. srpm собран в более новой версии)
rpm -ivh —nomd5 libtasn1-2.7-2.fc15.src.rpm
rpm -ivh —nomd5 gnutls-2.10.5-1.fc15.src.rpm - Архив исходных кодов (mod_gnutls-0.5.9.tar.bz2) cкопировал в /usr/src/redhat/SOURCES.
- В /usr/src/redhat/SPECS создал файл mod_gnutls.spec. За основу взят mod_gnutls.spec из http://dev.centos.org/centos/5/testing/SRPMS/mod_gnutls-0.2.0-1.el5.centos.src.rpm.
Содержимое файла в конце поста (mod_gnutls.spec). - Удалил старые пакеты вместе с зависимостями:
yum erase gnutls libtasn1 - Собрал libtasn1:
rpmbuild -bb —clean /usr/src/redhat/SPECS/libtasn1.spec - Установил пакеты libtasn1:
yum localinstall —nogpgcheck /usr/src/redhat/RPMS/x86_64/libtasn1-*.rpm - Собрал gnutls:
rpmbuild -bb —clean /usr/src/redhat/SPECS/gnutls.spec - Установил пакеты gnutls:
yum localinstall —nogpgcheck /usr/src/redhat/RPMS/x86_64/gnutls-*.rpm - Из файла /usr/lib64/pkgconfig/gnutls.pc из строки Requires.private удалил zlib, т.к. установленный zlib-devel не содержит определения для pkg-config.
- Собрал mod_gnutls:
rpmbuild -bb —clean /usr/src/redhat/SPECS/mod_gnutls.spec - Установил пакеты mod_gnutls:
yum localinstall —nogpgcheck /usr/src/redhat/RPMS/x86_64/mod_gnutls-*.rpm
Конфигурирование плагина
Модулю нужен доступ к файлу, в котором ведется его собственный кеш, путь к файлу задается ключем GnuTLSCache в файле конфигурации.
Если включен selinux, нужно выполнить настройку политики:
semanage fcontext -a -f «» -t httpd_cache_t «/var/cache/mod_gnutls_cache(/.*)?»
Необходимо создать каталог для файла кеша и назначить ему права:
mkdir /var/cache/mod_gnutls_cache
chown apache:apache /var/cache/mod_gnutls_cache
chmod 700 /var/cache/mod_gnutls_cache
Файл конфигурации по умолчанию лежит в /etc/httpd/conf.d/mod_gnutls.conf.
Пример файла конфигурации модуля mod_gnutls.conf
## Documentation Link:
## http://www.outoforder.cc/projects/apache/mod_gnutls/docs/
## Load the module into Apache.
LoadModule gnutls_module modules/libmod_gnutls.so
## Set Certificate MIME-types, may instead be in ssl.conf
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
## Set TLS Cache info
GnuTLSCache dbm "/var/cache/mod_gnutls_cache/server1_test_net.dbm"
GnuTLSCacheTimeout 300
##
Конфигурирование виртуальных хостов
При конфигурировании нужно учесть несколько моментов:
- Желательно полностью отключить mod_ssl.
- Каждый VirtualHost должен быть или полностью HTTP или полностью HTTPS, при «смешанном» варианте по протоколу HTTP все равно приходят SSL-шифрованные данные.
- Виртуальный HTTPS-хост «по-умолчанию» обязательно должен иметь сертификат и ключ, т.к. первоначальное соединение происходит именно с ним.
Пример конфигурации VirtualHost
Listen 80
Listen 443
NameVirtualHost *:80
NameVirtualHost *:443
ServerName defsrv.home.net
# По умолчанию все запросы перенаправляются на основной сайт (http://www.home.net)
<VirtualHost _default_:80>
Redirect permanent / http://www.home.net/
</VirtualHost>
# SSL-сертификат у дефолтного сервера должен присутсвовать обязательно!
<VirtualHost _default_:443>
GnuTLSEnable on
GnuTLSPriorities NORMAL
GnuTLSCertificateFile /etc/httpd/certs/defsrv_home_net.crt
GnuTLSKeyFile /etc/httpd/certs/defsrv_home_net.key
Redirect permanent / https://www.home.net/
</VirtualHost>
<VirtualHost *:80>
ServerName www.home.net:80
UseCanonicalName On
ServerAdmin webmaster@www.home.net
DocumentRoot /srv/www.home.net
#Конфигурация хоста
</VirtualHost>
<VirtualHost *:443>
ServerName www.home.net:443
UseCanonicalName On
ServerAdmin webmaster@www.home.net
DocumentRoot /srv/www.home.net
GnuTLSEnable on
GnuTLSPriorities NORMAL
GnuTLSCertificateFile /etc/httpd/certs/www_home_net.crt
GnuTLSKeyFile /etc/httpd/certs/www_home_net.key
#Конфигурация хоста
</VirtualHost>
<VirtualHost *:80>
ServerName test.home.net:80
UseCanonicalName On
ServerAdmin webmaster@test.home.net
DocumentRoot /srv/test.home.net
#Конфигурация хоста
</VirtualHost>
<VirtualHost *:443>
ServerName test.home.net:443
UseCanonicalName On
ServerAdmin webmaster@test.home.net
DocumentRoot /srv/test.home.net
GnuTLSEnable on
GnuTLSPriorities NORMAL
GnuTLSCertificateFile /etc/httpd/certs/test_home_net.crt
GnuTLSKeyFile /etc/httpd/certs/test_home_net.key
#Конфигурация хоста
</VirtualHost>
Спек-файл (mod_gnutls.spec)
Summary: mod_gnutls is a DSO module for the apache Web server.
Name: mod_gnutls
Version: 0.5.9
Release: 1%{?dist}
Group: System Environment/Daemons
URL: http://www.outoforder.cc/projects/apache/mod_gnutls/
Source: http://www.outoforder.cc/downloads/mod_gnutls/%{name}-%{version}.tar.bz2
Source1: mod_gnutls.conf
License: Apache Software License
BuildRoot: %{_tmppath}/%{name}-root
BuildRequires: httpd-devel > 2.0.42
BuildRequires: gnutls >= 1.2.0, gnutls-devel >= 1.2.0, gnutls-utils >= 1.2.0, apr-devel
Requires: httpd-mmn = %(cat %{_includedir}/httpd/.mmn || echo missing httpd-devel)
Requires: gnutls >= 1.2.0, httpd >= 2.0.42
%description
mod_gnutls uses the GnuTLS library to provide SSL v3, TLS 1.0 and TLS 1.1
encryption for Apache HTTPD. It is similar to mod_ssl in purpose, but does
not use OpenSSL.
%prep
%setup -q
%build
%configure --disable-srp
make
%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_libdir}/httpd/modules
install -m755 src/.libs/lib%{name}.so $RPM_BUILD_ROOT%{_libdir}/httpd/modules
# Install the config file
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d
install -m 644 %{SOURCE1}
$RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf
#Create a cache directory
mkdir -p -m 0700 $RPM_BUILD_ROOT%{_var}/cache/mod_gnutls_cache
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc LICENSE NOTICE README
%{_libdir}/httpd/modules/*.so
%config(noreplace) %{_sysconfdir}/httpd/conf.d/*.conf
%attr(0700, apache, apache) %{_var}/cache/mod_gnutls_cache
Spent hours going in circles following every guide I can find on the net.
I want to have two sites running on a single apache instance, something like this —
192.168.2.8/site1
and
192.168.2.8/site2
I’ve been going round in circles, but at the moment I have two conf files in ‘sites-available (symlinked to sites-enabled)’ that look like this-
<VirtualHost *:2000>
ServerAdmin webmaster@site1.com
ServerName site1
ServerAlias site1
# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site1/
# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/
Options +ExecCGI
# Logfiles
ErrorLog /home/user/site1/logs/error.log
CustomLog /home/user/site1/logs/access.log combined
</VirtualHost>
and
<VirtualHost *:3000>
ServerAdmin webmaster@site2.com
ServerName site2
ServerAlias site2
# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site2/
# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/
Options +ExecCGI
# Logfiles
ErrorLog /home/user/site2/logs/error.log
CustomLog /home/user/site2/logs/access.log combined
</VirtualHost>
http.conf looks like this-
NameVirtualHost *:2000
NameVirtualHost *:3000
At the moment I’m getting this error-
[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results
Ports.conf looks like this – (although no guides have mentioned any need to edit this)
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Can anyone give some simple instructions to get this running? Every guide I’ve found says to do it a different way, and each one leads to different errors. I’m obviously doing something wrong but have found no clear explanation of what that might be.
Just want one site accessible on port 2000 and the other accessible on port 3000 (or whatever, just picked those ports to test with).
I’m running Ubuntu server 12.04…
=============
EDIT
Followed another ‘guide’…
I’ve now set this up in sites-available:
<VirtualHost *:80>
DocumentRoot "/home/user/site1/"
ServerName 192.168.2.10/site1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/user/site2/"
ServerName 192.168.2.10/site2
</VirtualHost>
Have set this in apache2.conf:
ServerName site1
ServerName site2
Have added this to ports.conf:
Listen 192.168.2.10:80
==============
EDIT
It now works, I put this in a conf file in site-enabled:
<VirtualHost *:81>
DocumentRoot "/home/user/site1/"
ServerName site1
</VirtualHost>
<VirtualHost *:82>
DocumentRoot "/home/user/site2/"
ServerName site2
</VirtualHost>
I have this in ports.conf:
Listen *:80
Listen *:81
Listen *:82
I have this in apache2.conf:
ServerName site1
ServerName site2
I didn’t find this in any guides I just got it working through an entire day of trial and error so I don’t know if this is a good solution. But it’s at least working how I want it to now.
Spent hours going in circles following every guide I can find on the net.
I want to have two sites running on a single apache instance, something like this —
192.168.2.8/site1
and
192.168.2.8/site2
I’ve been going round in circles, but at the moment I have two conf files in ‘sites-available (symlinked to sites-enabled)’ that look like this-
<VirtualHost *:2000>
ServerAdmin webmaster@site1.com
ServerName site1
ServerAlias site1
# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site1/
# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/
Options +ExecCGI
# Logfiles
ErrorLog /home/user/site1/logs/error.log
CustomLog /home/user/site1/logs/access.log combined
</VirtualHost>
and
<VirtualHost *:3000>
ServerAdmin webmaster@site2.com
ServerName site2
ServerAlias site2
# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site2/
# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/
Options +ExecCGI
# Logfiles
ErrorLog /home/user/site2/logs/error.log
CustomLog /home/user/site2/logs/access.log combined
</VirtualHost>
http.conf looks like this-
NameVirtualHost *:2000
NameVirtualHost *:3000
At the moment I’m getting this error-
[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results
Ports.conf looks like this – (although no guides have mentioned any need to edit this)
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Can anyone give some simple instructions to get this running? Every guide I’ve found says to do it a different way, and each one leads to different errors. I’m obviously doing something wrong but have found no clear explanation of what that might be.
Just want one site accessible on port 2000 and the other accessible on port 3000 (or whatever, just picked those ports to test with).
I’m running Ubuntu server 12.04…
=============
EDIT
Followed another ‘guide’…
I’ve now set this up in sites-available:
<VirtualHost *:80>
DocumentRoot "/home/user/site1/"
ServerName 192.168.2.10/site1
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/user/site2/"
ServerName 192.168.2.10/site2
</VirtualHost>
Have set this in apache2.conf:
ServerName site1
ServerName site2
Have added this to ports.conf:
Listen 192.168.2.10:80
==============
EDIT
It now works, I put this in a conf file in site-enabled:
<VirtualHost *:81>
DocumentRoot "/home/user/site1/"
ServerName site1
</VirtualHost>
<VirtualHost *:82>
DocumentRoot "/home/user/site2/"
ServerName site2
</VirtualHost>
I have this in ports.conf:
Listen *:80
Listen *:81
Listen *:82
I have this in apache2.conf:
ServerName site1
ServerName site2
I didn’t find this in any guides I just got it working through an entire day of trial and error so I don’t know if this is a good solution. But it’s at least working how I want it to now.
Давайте узнаем, как настроить Apache и Nginx для размещения нескольких веб-сайтов.
Размещение сайтов на облачном сервере дает большую гибкость по сравнению с виртуальным хостингом. Вы можете установить все, что захотите, увеличить или уменьшить масштаб и настроить для повышения производительности и оптимизации затрат.
Если вы используете несколько бизнес-сайтов, но не хотите размещать их отдельно, вы можете воспользоваться виртуальным сервером на веб-серверах. Давайте посмотрим на этот сценарий.
У меня есть следующие два сайта, которые я хотел бы указать на мою одну облачную виртуальную машину.
Перед реализацией давайте разберемся, как это работает.
Концепция размещения нескольких веб-сайтов на одном экземпляре веб-сервера называется виртуальным сервером. Он определяется в файле конфигурации вместе с URL-адресом. Когда делается запрос на определенный URL-адрес, веб-сервер будет обслуживать трафик из соответствующего корня документа.
- Войдите в HTTP-сервер Apache
- Перейдите в расположение apache conf. (при установке по умолчанию — вы найдете его здесь /etc/httpd/conf/httpd.conf)
- Сделайте резервную копию файла httpd.conf
- Создайте контейнер VirtualHost, как показано ниже, я сделал для двух доменов.
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /opt/htdocs/lab ServerName lab.toadmin.ru.com ErrorLog logs/lab.toadmin.ru.com-error_log CustomLog logs/lab.toadmin.ru.com-access_log common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /opt/htdocs/gf-dev ServerName gf.dev ErrorLog logs/gf.dev-error_log CustomLog logs/gf.dev-access_log common </VirtualHost>
Примечание. Измените значение для ServerAdmin, DocumentRoot, ServerName, ErrorLog, CustomLog в соответствии с вашими требованиями.
- Перезапустите Apache HTTP и проверьте оба URL-адреса.
Настройте виртуальный хост в Nginx для размещения нескольких доменов.
- Вход на сервер Nginx
- Перейдите в место, где вы установили Nginx. (в расположении по умолчанию — вы найдете его здесь /etc/nginx/)
Есть несколько способов добиться этого. Либо вы можете изменить файл nginx.conf, либо пользовательский файл, если он у вас есть. Вы также можете создать custom.conf в папке conf.d. Выберите то, что подходит именно вам, и сделайте резервную копию при изменении существующего файла.
- Создайте блок сервера для обоих URL-адресов, как показано ниже.
server { listen 80; root /opt/htdocs/lab; index index.html index.htm; server_name lab.toadmin.ru.com; location / { try_files $uri $uri/ =404; } } server { listen 80; root /opt/htdocs/gf-dev; index index.html index.htm; server_name gf.dev; location / { try_files $uri $uri/ =404; } }
Примечание. Измените значение для root, имя_сервера в соответствии с вашими требованиями.
- Перезапустите Nginx и проверьте оба URL-адреса.
Не забудьте обновить запись DNS вашего URL-адреса, чтобы сопоставить его с IP-адресом сервера. После этого вы сможете получить доступ к URL-адресам, которые обслуживаются с помощью указанной выше конфигурации.
Вывод
Это было краткое руководство по размещению нескольких доменов на одном экземпляре веб-сервера, таком как Apache или Nginx. Как только ваш веб-сайт будет запущен, не забудьте проверить его на наличие уязвимостей в системе безопасности.
Понравилось читать статью? Как насчет того, чтобы поделиться с миром?
Что вы думаете об этой статье?