Проблема с виртуальными хостами для поддоменов в Apache? — Хабр Q&A
Структура каталогов такая:/var/www/test.ru
/var/www/test.ru/httpd
/var/www/test.ru/forum
/var/www/test.ru/media
В папке «httpd» находится сам сайт домена, а в папке «forum» соответственно сам поддомен «forum.test.ru».
Файл hosts:
127.0.0.1 localhost
127.0.1.1 WS01
127.0.0.1 test.ru
127.0.0.1 forum.test.ru
127.0.0.1 media.test.ru
Ну и файл /etc/apache2/sites-available/test.ru.conf
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/test.ru/httpd ServerName test.ru ServerAlias www.test.ru <Directory /var/www/test.ru/httpd> Options Indexes FollowSymlinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/test.ru/forum ServerName forum.test.ru ServerAlias www.forum.test.ru <Directory /var/www/test.ru/forum> Options Indexes FollowSymlinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/test.ru/media ServerName media.test.ru ServerAlias www.media.test.ru <Directory /var/www/test.ru/media> Options Indexes FollowSymlinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
При попытке добавить для «media» еще одну секцию и добавлении 127.0.0.1 с параметром «media.test.ru» в файл hosts, апач ругается на то, что ему не нравится VirtualHost. Подскажите где я накосячил?
Set virtual hosts on linux apache and nginx
Веб-сервер Apache является самым популярным средством размещения веб-контента в интернете. На его счету более половины всех действующих веб-сайтов. Это очень мощный и гибкий инструмент.
Apache разделяет свои функциональные возможности и компоненты на отдельные части, которые могут быть настроены и сконфигурированы независимо друг от друга. Базовая часть, которая отвечает за отдельный сайт или домен называется виртуальным хостом
(virtual host
).
Эта система позволяет администратору использовать один сервер, чтобы раздавать несколько сайтов используя один интерфейс или IP. Это удобно для тех, кто хочет использовать один VPS для хранения нескольких сайтов.
Каждый настроенный соответствующим образом домен будет направлять пользователя к определенной директории сервера, содержащей информацию этого сайта, соответствующего домену. При этом посетитель сайта не узнает, что данный сервер хранит и другие сайты. Эта схема может расширяема без каких-либо ограничений со стороны программного обеспечения до тех пор, пока сервер будет справляться с нагрузкой.
В этом руководстве мы расскажем, как настроить виртуальные хосты в Apache на VPS с Ubuntu 14.04. В процессе вы узнаете, как отображать разный контент для разных пользователей в зависимости от того, какой домен они запрашивают.
Необходимые условия
Перед тем, как приступать, вам необходимо создать не-рутового пользователя, как описано в шагах 1-4.
Также у вас должен быть установлен Apache, чтобы проделать описываемые ниже шаги. Если он еще не установлен, вы можете сделать это при помощи команды apt-get
:
sudo apt-get update
sudo apt-get install apache2
После завершения этих шагов, мы можем начать настройку виртуальных хостов.
В этом руководстве мы создадим виртуальный хост для доменов example.com
и test.com
. Мы будет ссылаться на них в руководстве, однако вам следует заменить их на свои домены при настройке ваших виртуальных хостов.
Если у вас нет свободных доменов, на которых можно потренироваться, вы можете использовать фиктивные доменные имена.
Чуть позже мы покажем, как отредактировать файл с локальными хостами для проверки конфигурации в случае, если вы используете фиктивные доменные имена. Это позволит протестировать конфигурацию с вашего домашнего компьютера, даже несмотря на то, что контент сайта не будет доступен по этому доменному имени другим пользователям.
Шаг 1 – Создание структуры директорий
Первый шаг, который мы собираемся предпринять, это создать структуру директорий, содержащую данные сайта, которые будут отображаться посетителям.
Наш document root
(корневой каталог – директория верхнего уровня, которую просматривает Apache в поисках контента для отображения) будет настроен на использование директорий внутри директории
. Здесь мы создадим директории для обоих виртуальных хостов, которые мы планируем сделать в этом руководстве.
В каждой из этих директорий мы создадим вложенную директорию public_html
, которая будет содержать реальные файлы. Это дает нам некоторую гибкость в плане хранения контента.
Например, для наших сайтов мы создадим директории следующим образом:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
Текст, выделенный красным, представляет собой доменные имена сайтов, которые мы хотим отображать с помощью нашего VPS.
Шаг 2 – Назначение прав
Теперь у нас есть структура директорий для наших файлов, но владелец этих директорий – root-пользователь. Если мы хотим, чтобы наши обычные пользователи могли изменять файлы в наших веб-директориях, мы можем изменить их владельца следующим образом:
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html
Переменная $USER
содержит имя пользователя, под которым вы залогинены в текущий момент. Теперь текущий пользователь владеет директориями public_html
, в которых мы будем хранить контент.
Нам так же необходимо немного отредактировать права доступа, чтобы убедиться, что доступ на чтение разрешен к общей веб-директории и всем файлам и папкам, содержащимся в ней. Это необходимо для того, чтобы страницы сайта отображались корректно:
sudo chmod -R 755 /var/www
Теперь ваш веб-сервер должен иметь разрешения, необходимые для отображения контента. Кроме того, теперь ваш пользователь имеет возможность создавать контент в необходимых директорий.
Шаг 3 – Создание демо-страниц для каждого виртуального хоста
Наша структура директорий готова. Давайте создадим какой-нибудь контент для отображения посетителям наших сайтов.
Мы делаем это просто для демонстрации, потому страницы будет очень простыми. Мы собираемся создать по странице
для каждого сайта.
Давайте начнем с example.com
. Мы можем создать и открыть файл index.html
в редакторе, введя команду:
nano /var/www/example.com/public_html/index.html
В этом файле создайте простой HTML-документ, который показывает, к какому сайту он относится. Наш файл выглядит следующим образом:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h2>Success! The example.com virtual host is working!</h2>
</body>
</html>
Когда закончите, сохраните и закройте файл.
Вы может скопировать файл, чтобы использовать его как основу для второго сайта:
cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html
После этого вы можете открыть файл и исправить его содержимое:
nano /var/www/test.com/public_html/index.html
<html>
<head>
<title>Welcome to Test.com!</title>
</head>
<body>
<h2>Success! The test.com virtual host is working!</h2>
</body>
</html>
Сохраните и закройте этот файл. Теперь у вас есть страницы, необходимые для проверки конфигурации виртуальных хостов.
Шаг 4 – Создание файлов нового виртуального хоста
Файлы виртуальных хостов задают их конфигурацию, и определяют, как именно веб-сервер Apache будет отвечать на запросы к разным доменам.
По умолчанию, Apache имеет файл виртуального хоста 000-default.conf
, который мы можем использовать в качестве отправной точки. Мы собираемся скопировать его, чтобы создать файлы виртуального хоста для каждого из наших доменов.
Мы начнем с одного домена, сконфигурируем его, скопируем для другого домена, и затем снова сделаем необходимые правки. Конфигурация Ubuntu по-умолчанию требует, чтобы каждый файл виртуального хоста заканчивался расширением
.
Создание файла первого виртуального хоста
Начнем с копирования файла для первого домена:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Откройте новый файл в редакторе с root-правами:
sudo nano /etc/apache2/sites-available/example.com.conf
Файл будет похож на этот (мы удалили комментарии, чтобы сделать его более читабельным):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Как видите, файл совсем небольшой. Мы поправим его для нашего первого домена и добавим некоторые новые директивы. Эта секция конфигурации виртуального хоста относится к любом запросам, которые сделаны по 80 порту (порт по-умолчанию для HTTP).
Прежде всего, мы должны изменить директиву ServerAdmin
на адрес электронной почты, на который администратор сайта будет получать электронные письма.
ServerAdmin [email protected]
Затем мы должны добавить две новые директивы. Первая, ServerName
, устанавливает основной домен, который должен соответствовать названию виртуального хоста. Это должно быть ваше доменное имя. Вторая, ServerAlias
, определяет другие имена, которые должны интерпретироваться так, как будто это основной домен. Это удобно для использования дополнительных доменных имен, например, с использованием www
:
ServerName example.com
ServerAlias www.example.com
Единственная вещь, которую нам осталось изменить в базовом файле виртуального хоста, это расположение корневого каталога этого домена. Мы уже создали нужную директорию, так что нам осталось изменить директиву
так, чтобы она ссылалась на созданную нами директорию:
DocumentRoot /var/www/example.com/public_html
Теперь наш файл виртуального хоста должен выглядеть следующим образом:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Сохраните и закройте файл.
Копирование первого виртуального хоста и настройка для второго домена
Теперь, когда у нас есть готовый первый виртуальный хост, мы можем создать второй, скопировав файл и поправив его там, где это необходимо.
Начните с копирования:
sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf
Откройте новый файл в редакторе с правами root-пользователя:
sudo nano /etc/apache2/sites-available/test.com.conf
Теперь вам нужно поправить всю необходимую информацию для второго домена. Когда вы закончите, файл должен выглядеть похожим образом:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/test.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Сохраните и закройте файл после внесения правок.
Шаг 5.1 – Включение новых виртуальных хостов Apache
Теперь, когда мы создали файлы наших виртуальных хостов, мы должны их включить. Apache содержит инструменты, позволяющие нам это сделать.
Мы можем использовать утилиту a2ensite
для включения каждого из наших сайтов следующим образом:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
После завершения необходимо перезапустить Apache, чтобы изменения вступили в силу:
sudo service apache2 restart
Скорее всего, вы получите сообщение, похожее на это:
* Restarting web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Это сообщение безобидно и не влияет на наш сайт.
If you have installed the nginx
package from the Ubuntu repositories, you will have two directories.
/etc/nginx/sites-enabled
and /etc/nginx/sites-available
.
In the main nginx configuration, /etc/nginx/nginx.conf
, you have the following line:
include /etc/nginx/sites-enabled/*.conf;
So basically to list all available virtualhosts, you can run the following command:
ls /etc/nginx/sites-available
To activate one of them, run the following command:
ln -s /etc/nginx/sites-available/www.example.org.conf /etc/nginx/sites-enabled/
The scripts that comes with Apache is basically just simple shell wrappers that does something similar as above.
After linking the files, remember to run sudo service nginx reload
/ service nginx reload
Шаг 6 – Настройка файла локальных хостов (опционально)
Если до этого вы использовали не реальные доменные имена, которыми вы владеете, а тестовые, вы можете протестировать работоспособность виртуальных хостов, временно изменив файл hosts
на вашем локальном компьютере.
Это позволит перехватывать любой запрос к доменам, которые вы настроили и перенаправлять его на ваш VPS сервер так, как это сделала бы система DNS в случае использования реально зарегистрированных доменов. Это будет работать только с вашего локального компьютера и используется только для тестирования.
Убедитесь, что дальнейшие шаги вы будете проделывать на вашем локальном компьютере, а не на VPS сервере. Вам необходимо знать пароль администратора или быть членом группы администраторов.
Если вы используете компьютер с Mac или Linux, вы можете редактировать локальный файл с правами администратора, введя команду:
sudo nano /etc/hosts
Вам необходимо добавить в файл публичный IP-адрес вашего VPS сервера и, следом, доменное имя, по которому вы хотите обращаться к этому VPS.
Для доменов, используемых в этом руководстве, предположим, что IP-адрес нашего VPS 111.111.111.111
. В этом случае мы можем добавить следующие строки в конец файла hosts
:
127.0.0.1 localhost
127.0.1.1 guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com
В результате этого любые запросы к example.com
и test.com
с нашего компьютера будут перенаправляться на наш сервер по адресу 111.111.111.111
. Это удобно для проверки правильности настройки наших виртуальных хостов для случая, когда мы не являемся реальными владельцами этих доменных имен.
Сохраните и закройте файл.
Шаг 7 – Тестирование результатов
Теперь, когда ваши виртуальные хосты сконфигурированы, вы можете легко протестировать работоспособность, перейдя в браузере по ранее настроенным адресам:
http://example.com
Если оба сайта работают, значит вы успешно сконфигурировали два виртуальных хоста на одном и том же сервере.
Если вы вносили изменения в файл hosts
на вашем локальном компьютере, теперь можете удалить добавленные строки, т.к. уже убедились в работоспособности конфигурации. Таким образом мы не будем хранить в файле “hosts” ненужные записи.
vhosts.conf | конфигурирование Apache для поддержки виртуальных хостов
Apache — виртуальные хосты
httpd-vhosts.conf — создание виртуальных хостов
Концепция виртуальных хостов позволяет создавать, конфигурировать и обслуживать на одном (физическом) веб-сервере Apache множество сайтов.
Виртуальный хост может быть:
«привязанным к IP-адресу» — используется отдельный IP-адрес для каждого сайта
или
«привязанным к имени» — один IP-адрес для множества сайтов с различными именами.
Термин Виртуальный — якобы существующий, получил распространение в конце 80-х годов. Компьютеры того времени не имели жестких дисков и при включении могли только подвести считывающую головку дисковода к первой дорожке гибкого диска. В начале работы, с пятидюймового системного диска емкостью 256 Кб загружались в память основные компоненты операционной системы (OS-DOS). Затем, с другой дискеты, программное обеспечение, например, Бейсик. Созданная на нем программа записывалась на гибкий диск. Для её исполнения необходимо было загрузить в память интерпретатор Бейсика. То есть, постоянно работал дисковод, приходилось менять гибкие диски, что занимало много времени.
На определенном этапе, с увеличением емкости памяти, появилась возможность часть её выделять и присваивать имя. В эту, именованную, допустим, как диск N, область памяти (получившую название — виртуальный диск), переписывалось нужное программное обеспечение. Отпадала необходимость постоянно обращаться к гибким дискам, что в десятки раз увеличивало производительность работы.
Хост (жарг. host — хозяин) — в обычном понимании любой компьютер, сервер, подключённый к локальной или глобальной сети.
Веб-узел — каждый подключенный к Интернету компьютер, независимо от выполняемых функций (сервер, компьютер клиента, DNS и FTP-сервер и т. д.) — имеет свой уникальный IP-адрес. Иначе обмен информацией — невозможен.
При включении модема, маршрутизатора интернет-провайдер выделит, для входа в сеть Интернет с вашего компьютера, динамический (временный) IP — адрес (ай-пи-адрес).
, в 07 час. 36 мин. 27 сек. вам выделен IP — 176.9.44.166
Узел — это адрес. Любой узел является хостом
Например: | ||
---|---|---|
Сайт | avege.ru | |
IP сайта | 88.212.253.127 | |
Ваш IP | 176.9.44.166 | Определить ваш IP |
протокол сервера | HTTP/1.1 |
Вы пришли на сайт — avege.ru
и получили с сервера с IP-адресом — 88.212.253.127
на ваш компьютер с IP — 176.9.44.166
страницу — (none) (см. адресную строку браузера).
После получения у интернет-провайдера IP — адреса и установки канала связи, происходит преобразование имени сайта, портала, сервера,
например — vk.com (ВКонтакте), в понятный для компьютера его полный адрес IP, имеющий вид — 87.240.165.80
Служба Internet выполняющая эту операцию, называется службой имен доменов — службой DNS (Domain Name System — система доменных имён).
Компьютеры, обеспечивающие выполнение программ этой службы, называются серверами имен доменов — серверами DNS (Domain Name Servers).
DNS используется для обозначения обоих понятий — службы и серверов имён доменов.
Администратор: Командная строка
Microsoft Windows [Version 10.0.14393] (c) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены. C:\Windows\system32>ping vk.com Обмен пакетами с vk.com [87.240.165.80] с 32 байтами данных: Ответ от 87.240.165.80: число байт=32 время=32мс TTL=58 Ответ от 87.240.165.80: число байт=32 время=32мс TTL=58 Ответ от 87.240.165.80: число байт=32 время=32мс TTL=58 Ответ от 87.240.165.80: число байт=32 время=33мс TTL=58 Статистика Ping для 87.240.165.80: Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 32мсек, Максимальное = 33 мсек, Среднее = 32 мсек C:\Windows\system32>
HTTP-сервер социальной сети ВКонтакте имеет выделенный IP-адрес — 87.240.165.80.
На предыдущей странице, в файл конфигурации для настройки каталогов пользователей — httpd-userdir.conf, были внесены изменения — определён каталог для виртуальных хостов (сайтов пользователей) — UserDir «www/docs».
Далее, в конфигурационном файле httpd-vhosts.conf нужно, в секции (секциях) VirtualHost, изменить несколько директив для вашего сайта (сайтов).
В начале внесите в файл httpd-vhosts.conf изменения для одного сайта
Для примера, можно временно назвать сайт — namesite.ru. — Это имя (доменное имя) одного из разрабатываемых или отлаживаемых сайтов на сервере Apache, которое, после полной настройки сервера Apache, легко будет заменить на выбранное вами.
При обращении к любому сайту по имени — //www.имя-сайта.ru/, будет выведена индексная страница — index.html
В нём три подкаталога:
- logs (C:/www/docs/logs/)
- namesite.ru-access.log — пустой файл
- namesite.ru-error.log — пустой файл
- cgi-bin (C:/www/docs/cgi-bin/)
- namesite.ru (C:/www/docs/namesite.ru/)
- index.html — индексная страница сайта
- папки и файлы страниц сайта
Структура вашего сайта (где, namesite.ru — это имя виртуального хоста — имя сайта).
- C:\
- www
- docs
- logs
- namesite.ru-access.log
- namesite.ru-error.log
- cgi-bin
- namesite.ru
- подкаталог 1
- подкаталог n
- index.html — индексная (главная) страница сайта
- logs
- html
- logs
- namesite.ru-access.log
- namesite.ru-error.log
- cgi-bin
- namesite.ru
- подкаталог 1
- подкаталог n
- index.html — индексная (главная) страница сайта
- logs
- docs
- Каталоги и файлы OS Windows и других программ
- www
Важно! В каталоге каждого сайта обязательно должен быть подкаталог logs с пустыми файлами журналов — namesite.ru-access.log и namesite.ru-error.log, а также файл главной страницы — index.html
Внимание! Без внесения изменений в файл — httpd-vhosts.conf
при проверке файла конфигурации виртуальных хостов с помощью команды — httpd.exe -S, вы получите несколько предупреждений:
Администратор: Командная строка
Microsoft Windows [Version 10.0.14393] (c) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены. C:\Windows\system32>cd C:\Program Files\Apache Software Foundation\Apache2.4\bin\ C:\Program Files\Apache Software Foundation\Apache2.4\bin>httpd.exe -t AH00112: Warning: DocumentRoot [C:/Program Files/Apache Software Foundation/Apache2.4/docs/dummy-host.server-apache24.ru] does not exist AH00112: Warning: DocumentRoot [C:/Program Files/Apache Software Foundation/Apache2.4/docs/dummy-host2.server-apache24.ru] does not exist Syntax OK C:\Program Files\Apache Software Foundation\Apache2.4\bin>
В каталоге C:/Program Files/Apache Software Foundation/Apache2.4/conf/extra/
откройте в Блокноте файл httpd-vhosts.conf
httpd-vhosts.conf — содержание файла конфигурации сервера Apache 2.4
# Virtual Hosts # # Required modules: mod_log_config # If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn’t need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL://httpd.apache.org/docs/2.4/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option ‘-S’ to verify your virtual host # configuration. # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # #<VirtualHost *:80> <VirtualHost 127.0.0.2:80> ServerAdmin [email protected] DocumentRoot «C:/Program Files/Apache Software Foundation/Apache2.4/docs/dummy-host.server-apache24.ru» ServerName dummy-host.server-apache24.ru ServerAlias www.dummy-host.server-apache24.ru ErrorLog «logs/dummy-host.server-apache24.ru-error.log» CustomLog «logs/dummy-host.server-apache24.ru-access.log» common </VirtualHost> #<VirtualHost *:80> <VirtualHost 127.0.0.2:80> ServerAdmin [email protected] DocumentRoot «C:/Program Files/Apache Software Foundation/Apache2.4/docs/dummy-host2.server-apache24.ru» ServerName dummy-host2.server-apache24.ru ErrorLog «logs/dummy-host2.server-apache24.ru-error.log» CustomLog «logs/dummy-host2.server-apache24.ru-access.log» common </VirtualHost>
Из содержания файла httpd-vhosts.conf становятся понятными причины ошибок:
AH00112: Внимание: DocumentRoot [C:/Program Files/Apache Software Foundation/Apache2.4/docs/dummy-host.server-apache24.ru] не существует
AH00112: Внимание: DocumentRoot [C:/Program Files/Apache Software Foundation/Apache2.4/docs/dummy-host2.server-apache24.ru] не существует
В частности, видно, что сервер Apache не может обратится к папкам примеров сайтов:
dummy-host.server-apache24.ru
dummy-host2.server-apache24.ru
Которые должны быть размещены в каталоге хостов — C:/Program Files/Apache Software Foundation/Apache2.4/docs/.
Доменные имена — dummy-host.server-apache24.ru и dummy-host2.server-apache24.ru (dummy — кукла, example — образец) — по многолетней традиции, используются для примера и их необходимо изменить.
Внесение изменений в файл конфигурации сервера Apache — httpd-vhosts.conf
Существует два способа конфигурирования Apache для поддержки некоторого числа виртуальных хостов:- виртуальные хосты на основе имени (более одного веб — сайта по IP — адресу)
- виртуальные хосты на основе IP (IP — адрес для каждого веб — сайта)
Возможен и смешанный вариант конфигурирования.
Виртуальные хосты основанные на адресе IP.
Первый шаг заключается в создании блока <VirtualHost> из комбинации адреса-IP и номера порта для каждого отдельного узла.
Пример — <VirtualHost 127.0.0.8:80> — привязывает виртуальные хосты к адресу -127.0.0.8 и 80-му порту:
namesite.ru — это имя (доменное имя) для разрабатываемого (тестируемого, отлаживаемого) сайта. Которое, после настройки веб-сервера Apache, можете заменить на выбранное вами.
Ни один сайт, в сети WWW, не может иметь IP-адрес из диапазона 127.0.0.1 — 127.255.255.255Поэтому, в секциях — <VirtualHost *:80> вместо символа » * » нужно указать IP-адрес из из указанного диапазона.
Для обращения к вашему сайту по доменному имени, например — namesite.ru, нужно, в файле конфигурации httpd-vhosts.conf, создать секцию <VirtualHost>. В директивах которой указать пути к каталогу, подкаталогам и файлам вашего сайта.
Сайты виртуальных хостов конфигурируются в файлах httpd-vhosts.conf и httpd-userdir.conf.
Внесите изменения в файл httpd-vhosts.conf, как показано ниже.
# Virtual Hosts # # Required modules: mod_log_config # If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn’t need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL://httpd.apache.org/docs/2.4/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option ‘-S’ to verify your virtual host # configuration. # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # <VirtualHost 127.0.0.8:80> ServerAdmin [email protected] DocumentRoot /www/docs/namesite.ru ServerName www.namesite.ru ServerAlias namesite.ru ErrorLog c:/www/docs/logs/namesite.ru-error.log CustomLog c:/www/docs/logs/namesite.ru-access.log common <IfModule alias_module> ScriptAlias /cgi-bin/ «c:/www/docs/cgi-bin/» </IfModule> <IfModule mime_module> AddOutputFilter INCLUDES .shtml .php </IfModule> <Directory «c:/www/docs/namesite.ru»> Options Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews AllowOverride All Order allow,deny Allow from all AddHandler server-parsed .shtml .shtm .html .htm </Directory> </VirtualHost> #============================================================== #<VirtualHost 127.0.0.9:80> # ServerAdmin [email protected] # DocumentRoot /www/docs/namesite1.ru # ServerName www.namesite1.ru # ServerAlias namesite1.ru # ErrorLog c:/www/docs/logs/namesite1.ru-error.log # CustomLog c:/www/docs/logs/namesite1.ru-access.log common #<IfModule alias_module> # ScriptAlias /cgi-bin/ «c:/www/docs/cgi-bin/» #</IfModule> #<IfModule mime_module> # AddOutputFilter INCLUDES .shtml .php #</IfModule> #<Directory «c:/www/docs/namesite1.ru»> # Options Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # AllowOverride All # Order allow,deny # Allow from all # AddHandler server-parsed .shtml .shtm .html .htm #</Directory> #</VirtualHost>
Все записи, за исключением выделенных красным цветом, должны быть закомментированы. Строки начинающиеся с символа ‘#’ — это комментарии.
Если вы создали секцию для домена www.namesite.ru (namesite.ru) и хотите добавить новый виртуальный хост, то просто удалите символ комментария ‘#’, со строк с 45 по 65 и замените avege.ru на имя вашего сайта
Для проверки файлов конфигурации на синтаксические ошибки, используется команда — httpd.exe -t.
Проверить файл конфигурации виртуальных хостов можно с помощью команды — httpd.exe -S.
Директива — команда конфигурации, которая контролирует один или несколько аспектов поведения сервера Apache.
Внимание! Если вы не создали в каталоге C:/www/docs/ папку сайта с именем namesite.ru
(c:/www/docs/namesite.ru/)
и не внесли изменения в файлы — httpd-userdir.conf и hosts
то при проверке файла конфигурации виртуальных хостов с помощью команды — httpd.exe -S, вы получите несколько предупреждений:
Администратор: Командная строка
Microsoft Windows [Version 10.0.14393] (c) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены. C:\Windows\system32>cd C:\Program Files\Apache Software Foundation\Apache2.4\bin\ C:\Program Files\Apache Software Foundation\Apache2.4\bin>httpd.exe -S AH00112: Warning: DocumentRoot [C:/www/docs/namesite.ru] does not exist VirtualHost configuration: 127.0.0.8:80 www.namesite.ru (C:/Program Files/Apache Software Foundation/Apache2.4/conf/extra/httpd-vhosts.conf:23) (OS 3)╤шёЄхьх эх єфрхЄё эрщЄш єърчрээ√щ яєЄ№. : AH02291: Cannot access directory 'C:/www/docs/namesite.ru/logs/' for error log of vhost defined at C:/Program Files/Apache Software Foundation/Apache2.4/conf/extra/httpd-vhosts.conf:23 AH00014: Configuration check failed C:\Program Files\Apache Software Foundation\Apache2.4\bin>
Установка сервера Apache 2.4 на Windows
Виртуальный хостинг Apache: виртуальные хосты на основе IP и имен в RHEL / CentOS / Fedora
Как все мы знаем, Apache — очень мощный, очень гибкий и настраиваемый веб-сервер для ОС *Nix . Здесь, в этом руководстве, мы собираемся обсудить еще одну особенность Apache,которая позволяет нам размещать более одного веб-сайта на одной машине с Linux. Внедрение виртуального хостинга с веб-сервером Apache может помочь вам сэкономить средства, которые вы инвестируете в обслуживание вашего сервера и его администрирование.
Концепция общего веб-хостинга и реселлерского веб-хостинга основана только на этой возможности Apache .
Типы виртуальных хостов
Существует два типа виртуального хостинга, доступных с Apache.
Виртуальный хостинг на основе имени
Виртуальный хостинг на основе имениС помощью виртуального хостинга на основе имени вы можете разместить несколько доменов/ сайтов на одном компьютере с одним IP . Все домены на этом сервере будут использовать один IP-адрес. Это легче настроить, чем виртуальный хостинг на основе IP, вам нужно только настроить DNS домена, чтобы сопоставить его с правильным IP-адресом, а затем настроить Apache для распознавания его по доменным именам.
Виртуальный хостинг на основе IP
Виртуальный хостинг на основе IP
Виртуальный хостинг на основе IP позволяет назначить отдельный IP-адрес для каждого домена на одном сервере, эти IP-адреса могут быть подключены к серверу с помощью одной карты NIC и нескольких сетевых карт.
Давайте настроим Виртуальный хостинг на основе имени и Виртуальный хостинг на основе IP в RHEL, CentOS и Fedora .
Тестовая среда
- ОС — CentOS 6.5
- Приложение — веб-сервер Apache
- IP-адрес — 192.168.0.100
- IP-адрес — 192.168.0.101
- Домен — www.example1.com
- Домен — www.example2.com
Как настроить виртуальные хосты Apache на основе IP и имен
Перед настройкой виртуального хостинга с Apache на вашей системе должно быть установлено программное обеспечение Apache Web. если нет, установите его с помощью установщика пакета по умолчанию, называемого yum.
[root@tecmint ~]# yum install httpd
Настройка имени на основе виртуального хоста
Но перед созданием виртуального хоста вам необходимо создать каталог, в котором вы будете хранить все файлы вашего сайта. Итак, создайте каталоги для этих двух виртуальных хостов в папке /var/www/html . Помните, что
/var/www/html будет корневым каталогом документов по умолчанию в виртуальной конфигурации Apache.
[root@tecmint ~]# mkdir /var/www/html/example1.com/
[root@tecmint ~]# mkdir /var/www/html/example2.com/
Чтобы настроить виртуальный хостинг на основе имен, вы должны указать Apache, какой IP-адрес вы будете использовать для получения запросов Apache для всех веб-сайтов или доменных имен. Мы можем сделать это с помощью директивы NameVirtualHost . Откройте основной файл конфигурации Apache с помощью редактора VI .
[root@tecmint ~]# vi /etc/httpd/conf/httpd.conf
Найдите NameVirtualHost и раскомментируйте эту строку, удалив перед ней знак # .
NameVirtualHost
Затем добавьте IP-адрес, с которым вы хотите получать запросы Apache. После изменений ваш файл должен выглядеть следующим образом:
NameVirtualHost 192.168.0.100:80
Теперь пришло время для настройки виртуальных разделов хоста для ваших доменов, перейдите к нижней части файла, нажав Shift + G . Здесь, в этом примере, мы настраиваем разделы виртуального хоста для двух доменов.
- www.example1.com
- www.example2.com
Добавьте следующие две виртуальные директивы внизу файла. Сохраните и закройте файл.
<VirtualHost 192.168.0.100:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/example1.com
ServerName www.example1.com
ErrorLog logs/www.example1.com-error_log
CustomLog logs/www.example1.com-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/example2.com
ServerName www.example2.com
ErrorLog logs/www.example2.com-error_log
CustomLog logs/www.example2.com-access_log common
</VirtualHost>
Вы можете добавить столько директив, сколько хотите добавить в раздел виртуальных хостов ваших доменов. Когда вы закончите с изменениями в файле httpd.conf , пожалуйста, проверьте синтаксис файлов с помощью следующей команды.
[root@tecmint ~]# httpd -tSyntax OK
Рекомендуется проверять синтаксис файла после внесения некоторых изменений и перед перезапуском веб-сервера, поскольку в случае неправильного синтаксиса Apache откажется работать с некоторыми ошибками и в конечном итоге повлияет на работу существующего веб-сервера на некоторое время, если «syntax OK» . Перезапустите ваш веб-сервер и добавьте его в chkconfig, чтобы ваш веб-сервер запускался на уровнях запуска 3 и 5 только во время загрузки.
[root@tecmint ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ root @ tecmint ~] # chkconfig --level 35 httpd on
Теперь пришло время создать тестовую страницу с именем index.html, добавить некоторое содержимое в файл, чтобы у нас было что проверить, когда IP-адрес вызывает виртуальный хост.
[root @ tecmint ~] # vi /var/www/html/example1.com/index.html
<html>
<head>
<title> www.example1.com </title>
</head>
<body>
<h2>Hello, Welcome to www.example1.com. </h2>
</body>
</html>
[ root @ tecmint ~] # vi /var/www/html/example2.com/index.html
<html>
<head>
<title> www.example2.com </title>
</head>
<body>
<h2> Hello, Welcome to www.example2.com. </h2>
</body>
</html>
Как только вы закончите с этим, вы можете проверить настройки, открыв оба домена в браузере.
http://www.example1.com http://www.example2.com
Предварительный просмотр: www.example1.com
Виртуальный хостинг: www.example1.comВиртуальный хостинг: www.example2.comНастройка виртуального хостинга на базе IP Linux
Чтобы настроить виртуальный хостинг на основе IP, вы должны иметь более одного IP-адреса / порта, назначенного вашему серверу или вашему компьютеру Linux.
Это может быть одна карта NIC , например: eth0: 1 , eth0: 2 , eth0: 3 … и так далее. Можно также подключить несколько сетевых карт. Если вы не знаете, как создать несколько IP-адресов на одном сетевом адаптере , следуйте приведенному ниже руководству, которое поможет вам в создании.
Целью реализации виртуального хостинга на основе IP является назначение реализации для каждого домена, и этот конкретный IP не будет использоваться никаким другим доменом.
Этот тип настройки требуется, когда веб-сайт работает с сертификатом SSL ( mod_ssl ) или на разных портах и IP-адресах. Вы также можете запустить несколько экземпляров Apache на одном компьютере. Чтобы проверить IP-адреса, подключенные к вашему серверу, проверьте его с помощью команды ifconfig .
root @ tecmint ~] # ifconfig
Пример вывода
eth0 Link encap:Ethernet HWaddr 08:00:27:4C:EB:CE
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe4c:ebce/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:17550 errors:0 dropped:0 overruns:0 frame:0
TX packets:15120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16565983 (15.7 MiB) TX bytes:2409604 (2.2 MiB)
eth0:1 Link encap:Ethernet HWaddr 08:00:27:4C:EB:CE
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1775 errors:0 dropped:0 overruns:0 frame:0
TX packets:1775 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:3416104 (3.2 MiB) TX bytes:3416104 (3.2 MiB)
Как видно из вышеприведенного вывода, два IP-адреса 192.168.0.100 ( eth0 ) и 192.168.0.101 ( eth0: 1 ) подключены к серверу, оба IP-адреса назначены одному физическому сетевому устройству ( eth0 ).
Теперь, назначив определенный IP / порт для получения http-запросов, вы можете просто сделать это, изменив директиву Listen в файле httpd.conf .
[root @ tecmint ~] # vi /etc/httpd/conf/httpd.conf
Ищите слово «Listen». Вы найдете раздел, в котором написано краткое описание директивы Listen. В этом разделе прокомментируйте оригинальную строку и напишите собственную директиву ниже этой строки.
# Listen 80
Listen 192.168.0.100:80
Теперь создайте разделы виртуального хоста для обоих доменов. Перейдите в конец файла и добавьте следующие виртуальные директивы.
<VirtualHost 192.168.0.100:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/example1
ServerName www.example1.com
ErrorLog logs/www.example1.com-error_log
TransferLog logs/www.example1.com-access_log
</VirtualHost><VirtualHost 192.168.0.101:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/example2
ServerName www.example2.com
ErrorLog logs/www.example2.com-error_log
TransferLog logs/www.example2.com-access_log
</VirtualHost>
Теперь, поскольку вы изменили основной файл конфигурации Apache, вам нужно перезапустить службу http, как показано ниже.
[root@tecmint ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
Проверьте настройки виртуального хостинга на основе IP, открыв URL-адреса в веб-браузере, как показано ниже.
http://www.example1.com
http://www.example2.com
Это все, что касается виртуального хоста Apache сегодня.
Похожие посты
Виртуальные хосты Apache: безопасная настройка для Debian/Ubuntu
Всем привет! Данная статья описывает правильную, безопасную настройку виртуальных хостов в Debian.
Пользуясь данной инструкцией Вы сможете установить безопасные права доступа хостов так, что каждый хост сможет обращаться к данным, предназначенным только для него самого.
Давайте в качестве примера создадим виртуальный хост «site.com».
Шаг 0 – Создание файла конфигурации виртуального хоста
Скопируем стандартный файл конфигурации в качестве исходника:
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site.com
Шаг 1 — Права пользователей
Для каждого хоста будет создан отдельный пользователь. Домашние директории при этом будут храниться по пути /var/www/папка_пользователя.
Создаём пользователя site.com с созданием домашней директории в /var/www/. Флаги:
-m — создание папки автоматически;
-U — создание одноименной группы, в которую пользователь будет помещён;
-s — указание шелла, в нашем случае — шелл будет отсутствовать.
useradd site.com -b /var/www/ -m -U -s /bin/false
Задаём пароль пользователя:
passwd site.com
Устанавливаем права на папку пользователя:
chmod 754 /var/www/site.com
Создаём папку для веб-сайта:
mkdir -p -m 754 /var/www/site.com/public_html/
Создаём папку для хранения сессий/загружаемых файлов/логов
mkdir -p -m 777 /var/www/site.com/tmp
Разрешаем удалять папку только владельцу:
chmod +t /var/www/site.com/tmp
Задаём владельца всех вложенных папок
chown -R site.com:site.com /var/www/site.com/
Шаг 2 — Запуск Apache от разных пользователей
Из коробки Apache работает от одного пользователя для всех хостов, то есть злоумышленник, получив доступ к одному сайту может прочитать файлы соседних проектов. Для исправления этого недостатка нужно установить модифицированную версию Apache под названием apache2-mpm-itk. После установки в конфигах виртуальных хостов можно будет указать от какого пользователя и группы должен работать apache для конкретного сайта.
apt-get install apache2-mpm-itk
Пользователь и группа задается строкой в конфиге:
AssignUserId www-data site.com
Здесь в качестве группы мы указываем www-data для того, чтобы из веба нельзя было править файлы нашего проекта, кроме тех, на которых стоят права o+w. При этом нужно запретить консоль у пользователя www-data:
usermod -s /bin/false www-data
Шаг 3 — Отдельный tmp для каждого сайта
Заданием отдельной временной папки для каждого сайта мы предотвращаем инклуд сессий с соседнего сайта. Для этого используем директивы upload_tmp_dir и session.save_path:
php_admin_value upload_tmp_dir "/var/www/site.com/tmp"
php_admin_value session.save_path "/var/www/site.com/tmp"
Шаг 4 — Запрет PHP выходить выше пользовательской домашней директории
Запрет выхода выше директории задаётся директивой open_basedir:
php_admin_value open_basedir "/var/www/site.com/:."
Шаг 5 — Хранение логов в папке пользователя
Файлы для хранения логов ошибок и доступа задаются следующими директивами:
ErrorLog /var/www/site.com/error_log
CustomLog /var/www/site.com/access_log combined
В результате на выходе получаем следующий конфиг:
<VirtualHost *:80>
ServerName site.com
ServerAlias www.site.com
DocumentRoot /var/www/site.com/public_html
ErrorLog /var/www/site.com/error_log
CustomLog /var/www/site.com/access_log combined
AssignUserId site.com site.com
php_admin_value open_basedir "/var/www/site.com/:."
php_admin_value upload_tmp_dir "/var/www/site.com/tmp"
php_admin_value session.save_path "/var/www/site.com/tmp"
</VirtualHost>
Шаг 6 — Завершение настройки
После сохранения конфигурации нужно активировать виртуальный хост:
a2ensite site.com
А затем перечитать конфиги:
/etc/init.d/apache2 reload
Шаг 7 — Проверка работы
Создадим тестовую веб-страницу для виртуального хоста:
vi /var/www/site.com/public_html/index.html
И запишем в него следующий код:
<html>
<head>
<title>site.com</title>
</head>
<body>
<h2>site.com</h2>
</body>
</html>
После направления доменного имени на IP-адрес сервера при обращении к даному адресу в браузере будет открыта созданная нами веб-страничка. Виртуальный хост полностью настроен.
Как настроить в Apache виртуальные хосты на Debian 8
Веб-сервер Apache является один из наиболее популярных способов обработке веб-контента в Интернете. На его долю приходится более половины всех активных веб-сайтов в интернете и является чрезвычайно мощным и гибким.Apache разбивает его функциональные возможности и компоненты в отдельные единицы, которые можно настроить независимо друг от друга. Базовый блок, который описывает отдельный сайт или домен называется виртуальный хост.
При использовании виртуальных хостов, вы можете использовать один сервер для размещения нескольких доменов или сайтов из одного интерфейса или IP с помощью механизма согласования. Настроить запрос на домен, чтобы направить посетителя к конкретному каталогу, содержащего информацию об сайте. Другими словами, вы можете разместить более одного веб-сайта на одном сервере. Эта схема может быть расширена без каких-либо ограничений программного обеспечения до тех пор, пока ваш сервер может справиться с нагрузкой.
На этом уроке мы создадим два виртуальных хоста Apache на сервере Debian 8, с разным содержанием для посетителей на основе домена, которые они посещают.
Предпосылки
Для завершения этого урока вам понадобятся:
В этом руководстве мы создадим виртуальные хосты для example.ru
и test.ru
, но вы можете заменить на свои собственные домены или значения, следуя далее.
Если вы не имеете в наличии домены, вы можете использовать example.ru
и test.ru
и следовать Шагу 5 из этого учебника, чтобы настроить файл локальные хосты, чтобы сопоставить эти домены IP – адресу вашего сервера. Это позволит вам проверить вашу конфигурацию с локального компьютера.
Шаг 1 – Создание структуры каталогов
Первый шаг, который мы собираемся принять, это сделать структуру каталогов, которая будет содержать данные сайта, которые мы будет выкладывать для посетителей.
Наш корневой документ, каталог верхнего уровня, который указывает на Apache, будут установлены в отдельных каталогах в каталоге /var/www
. Мы создадим каталог для каждого из виртуальных хостов, которые мы настроим.
В каждом из этих каталогов, мы создадим папку public_html
, которая будет содержать веб – страницы. Это дает нам немного больше гибкости в том, как мы применяем более сложные веб – приложения в будущем; папка public_html
будет держать веб – контент и родительская папка, может содержать сценарии или код приложения для поддержки веб – контента.
Создание каталогов с помощью следующих команд:
sudo mkdir -p /var/www/example.ru/public_html sudo mkdir -p /var/www/test.ru/public_html
Так как мы создали каталоги с sudo
, они принадлежат нашим суперпользователю. Если мы хотим, чтобы наш обычный пользователь имел возможность изменять файлы в наших веб – каталогах, мы изменим права собственности, примерно так:
sudo chown -R $USER:$USER /var/www/example.ru/public_html sudo chown -R $USER:$USER /var/www/test.ru/public_html
Переменная $USER
использует значение пользователя, при помощи которого вы вошли в систему при нажатии кнопки ENTER
. Делая это, наш обычный пользователь в настоящее время владеет подкаталогом public_html
, где мы будем хранящие наше содержание.
Мы также должны изменить наши разрешения, чтобы гарантировать, что доступ на чтение разрешен к общему веб – каталогу и все файлы и папки, которые она содержит. Выполните эту команду, чтобы изменить права доступа к папке /var/www
и ее подпапок:
sudo chmod -R 755 /var/www
Теперь Ваш веб-сервер должен иметь разрешения, необходимые для предоставления контента, а пользователь должен иметь возможность создавать контент в нужные папки. Давайте создадим файл HTML для каждого сайта.
Мы создали нашу структуру каталогов. Давайте создадим некоторое содержание.
Шаг 2 – Создание страниц по умолчанию для каждого виртуального хоста
Давайте создадим простую страницу index.html
для каждого сайта. Это поможет нам гарантировать, что наши виртуальные хосты настроены должным образом.
Давайте начнем с страницы для example.ru
. Отредактируем новый файл index.html
с помощью следующей команды:
nano /var/www/example.ru/public_html/index.html
В этом файле, создадим простой HTML – документ, который указывает на главную страницу, когда посетитель попадает на example.ru
:
/var/www/example.ru/public_html/index.html
<html> <head> <title>Добро пожаловать Example.ru!</title> </head> <body> <h2>успех! Виртуальный хост example.ru работает!</h2> </body> </html>
Сохраните и закройте файл, когда вы закончите.
Теперь скопируйте этот файл на сайт test.ru
:
cp /var/www/example.ru/public_html/index.html /var/www/test.ru/public_html/index.html
Затем откройте файл в редакторе:
nano /var/www/test.ru/public_html/index.html
Изменить файл так, чтобы он ссылался на test.ru
вместо example.ru
:
/var/www/test.ru/public_html/index.html
<html> <head> <title>Добро пожаловать на Test.ru!</title> </head> <body> <h2>Успех! Виртуальный хост test.ru работает!</h2> </body> </html>
Сохраните и закройте этот файл. Теперь у вас есть страницы, необходимые для проверки конфигурации виртуального хоста. Далее, давайте настроим виртуальные хосты.
Шаг 3 – Создайте новый файл виртуальных хостов
Файл виртуальных хостов указывает на фактическую конфигурацию наших виртуальных хостов и диктует, как веб-серверу Apache будет реагировать на различные запросы домена.
Apache поставляется с файлом виртуальных хостов по умолчанию под названием 000-default.conf
, которое можно использовать в качестве отправной точки. Скопируйте этот файл для первого домена:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.ru.conf
Примечание : Конфигурация Apache по умолчанию в Debian 8 требует, чтобы каждый файл виртуальных хостов заканчивался расширением .conf
.
Откройте новый файл в редакторе:
sudo nano /etc/apache2/sites-available/example.ru.conf
Файл будет выглядеть как на следующем примере, с некоторыми дополнительными комментариями:
/etc/apache2/sites-available/example.ru.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Этот виртуальный хост обрабатывает любые запросы, сделанные на порт 80
, порт HTTP по умолчанию. Давайте сделаем несколько изменений в этой конфигурации, и добавим несколько новых директив.
Во- первых, изменим директиву ServerAdmin
по электронной почте о том, что администратор сайта может получать сообщения через электронной почты.
/etc/apache2/sites-available/example.ru.conf
ServerAdmin [email protected]
Далее, нам необходимо добавить две новые директивы. Первая из них , называется ServerName
, устанавливает базовый домен для данного виртуального хоста. Вторая называется ServerAlias
, определяет дальнейшие имена, которые должны соответствовать, как если бы они были базовым именем. Это полезно для сопоставления дополнительных узлов, которые вы определили, так как example.ru
и www.example.ru
оба работают, при условии, если оба этих хоста указывают на IP – адрес этого сервера.
Добавьте эти две директивы в файл конфигурации, сразу после строки ServerAdmin
:
/etc/apache2/sites-available/example.ru.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName example.ru ServerAlias www.example.ru DocumentRoot /var/www/html ...
Далее, измените местоположение корневого каталога документов для этого домена, изменив директиву DocumentRoot
, чтобы указать на каталог, созданный для этого хоста:
DocumentRoot /var/www/example.ru/public_html
После того, как вы сделали эти изменения, ваш файл должен выглядеть следующим образом:
/etc/apache2/sites-available/example.ru.conf
<VirtualHost *:80> ServerAdmin [email protected] ServerName example.ru ServerAlias www.example.ru DocumentRoot /var/www/example.ru/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Сохраните и закройте файл.
Затем создайте второй файл конфигурации, создав копию этого файла:
sudo cp /etc/apache2/sites-available/example.ru.conf /etc/apache2/sites-available/test.ru.conf
Откройте новый файл в редакторе:
sudo nano /etc/apache2/sites-available/test.ru.conf
Затем измените соответствующие настройки для ссылки на свой второй домен. Когда вы закончите, ваш файл будет выглядеть следующим образом:
/etc/apache2/sites-available/test.ru.conf
<VirtualHost *:80> ServerAdmin [email protected] ServerName test.ru ServerAlias www.test.ru DocumentRoot /var/www/test.ru/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Сохраните и закройте файл.
Теперь, когда мы создали файлы виртуальных хостов, мы можем включить их.
Шаг 4 – Включение новых файлов виртуальных хостов
Вы создали папки и файлы конфигурации виртуальных хостов, но Apache не будет использовать их , пока вы не включите их. Вы можете использовать инструмент a2ensite
для того, чтобы каждый из ваших сайтов заработал.
Активируйте первый сайт:
sudo a2ensite example.ru.conf
Вы увидите следующий вывод, если не было никаких ошибок синтаксиса или опечатки в вашем файле:
Вывод
Enabling site example.ru. To activate the new configuration, you need to run: service apache2 reload
Для того, чтобы ваши изменения вступили в силу, вы должны перезагрузить Apache. Но прежде чем сделать, включите другой сайт:
sudo a2ensite test.ru.conf
Вы увидите подобное сообщение, указывающее, что сайт был включен:
Вывод
Enabling site test.ru. To activate the new configuration, you need to run: service apache2 reload
Затем отключите узел по умолчанию, определенный в 000-default.conf
с помощью команды a2dissite
:
sudo a2dissite 000-default.conf
Теперь перезапустите Apache:
sudo systemctl restart apache2
Сайты теперь настроены. Давайте проверим их. Если вы используете реальные домены, настроенные, указывающие на IP-адрес вашего сервера, вы можете пропустить следующий шаг. Но если ваши домены еще не настроены, или если вы просто сделали тестирование, читайте дальше, чтобы узнать, как проверить нашу установку с помощью локального компьютера.
Шаг 5 – Настройка локального файла Hosts (Необязательно)
Если вы не использовали фактические доменные имена, которыми вы владеете, чтобы проверить эту процедуру, используя некоторые примеры доменов вместо реальных, вы можете по крайней мере проверить функциональность этого процесса, временно изменив файл hosts
на локальном компьютере.
Это позволит перехватывать любые запросы для доменов, настроить и направить их на свой VPS сервер, так же, как это делает система DNS, если бы вы использовали зарегистрированные доменов. Это будет работать только с вашего компьютера, хотя, и это полезно только для целей тестирования.
Убедитесь, что вы выполнили следующие действия на локальном компьютере, а не сервере VPS. Вам также необходимо знать пароль администратора локального компьютера или быть членом группы администраторов.
Если вы на компьютере Mac или Linux, редактировать локальный файл с правами администратора, набрав:
sudo nano /etc/hosts
Если вы на Windows, откройте командную строку с правами администратора и введите:
notepad %windir%\system32\drivers\etc\hosts
После того, как у вы откроете файл, добавьте строку, которая отображает публичный IP-адрес вашего сервера для каждого доменного имени, как показано в следующем примере:
/etc/hosts
127.0.0.1 localhost ... 111.111.111.111 example.ru 111.111.111.111 test.ru
Это позволит направлять любые запросы на example.ru
и test.ru
на вашем компьютере и отправить их на сервер в 111.111.111.111
.
Сохраните и закройте файл. Теперь вы можете проверить вашу установку. Когда вы уверены, что все работает, удалите две строки из файла.
Шаг 6 – тестирование ваших результатов
Теперь, когда у вас настроены ваши виртуальные хосты, вы можете протестировать установку легко, перейдя в домены, настроенные в веб – браузере. Посетите первый сайт по адресу http://example.ru
и вы увидите страницу, которая выглядит следующим образом :
Успех! Виртуальный хост example.ru работает!
Точно так же, если вы посетите ваш второй хост по адресу http://test.ru
, вы увидите файл, который вы создали для своего второго сайта:
Успех! Виртуальный хост test.ru работает!
Если оба из этих сайта работают, вы успешно настроили два виртуальных хостов на одном сервере.
Примечание:
Если вы настроили файл хостов на вашем домашнем компьютере, как показано на шаге 5, то теперь вы можете удалить эти строки, которые добавили, так как вы уже проверили работоспособность вашей конфигурации. Это позволит предотвратить ваши хосты файл от заполнения записей, которые на самом деле не нужны.
Вывод
Теперь у вас есть один сервер с двумя отдельными доменными именами. Вы можете расширить этот процесс, выполнив следующие действия, чтобы добавить дополнительные виртуальные хосты.
Там нет ограничения программного обеспечения по количеству доменных имен, которые Apache может обрабатывать, так что не стесняйтесь, сделайте столько, сколько ваш сервер способен обрабатывать.
Чтобы использовать Apache для обслуживания защищенного контента, следуйте учебнику, как установить сертификат SSL и SPDY на Ubuntu с помощью «Let’s Encrypt». Чтобы использовать Apache в передней части вашего веб – приложения, прочитайте гид как использовать Apache в качестве обратного прокси сервера с mod_proxy на Debian 8.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Автоматизация создания виртуального хоста для web-разработки на базе Apache+Nginx / Habr
Как быстро создать виртуальнй хост и структуру папок одной строкой в терминале
Так уж сложилось, что для web-разработки я использую отдельный сервер на базе Debian. В первую очередь это обусловлено тем, что я часто работаю вне дома, а так-же это позволяет совместно работать над проектом с коллегами.
Раньше мне приходилось вручную создавать директории для сайта, копировать и править конфиги. Я тратил на это кучу времени и иногда ошибался, а потом судорожно искал где и что я упуслил.
Не так давно я задумался над автоматизацией процесса создания виртуальных хостов. Порыв немного в интернетах, и заодно вспомнив bash, родился скрипт, который избавил меня от рутины и ошибок одновременно.
Конфигурация у меня следующая:
- Стандартный LAMP + NGINX в качестве фронт-энда.
- Директория с хостами /var/www/hosting/
- Директоря виртуального хоста = имени домена
- Стуктура виртуального хоста
- test.ru/cgi-bin
- test.ru/www
- test.ru/log
Создаем файл:
cd ~
touch addvhost.sh
chmod +x addvhost.sh
и пишем в него следующее
#!/bin/sh
hostmaster="[email protected]" # Электропочта Администратора сервера
www_path="/var/www/hosting/" # Путь до директории с виртуальными хостами
wwwuser="www-data"
wwwgroup="www-data"
case "$@" in
"")
echo "Введите имя домена (as root)."
;;
*)
clear
echo "Создаю директории сайта"
mkdir -p $www_path$1/www/
mkdir -p $www_path$1/cgi-bin/
mkdir -p $www_path$1/log/
echo "$www_path$1/www/"
echo "$www_path$1/cgi-bin/"
echo "$www_path$1/log/"
echo "\nСоздаю пустой index.html "
echo " " > $www_path$1/www/index.html
chown -R $wwwuser:$wwwgroup /$www_path$1
chmod -R 0755 /$www_path$1
echo "\nДобавляю хост в: /etc/apache2/sites-enabled/$1"
exec 3>&1 1>/etc/apache2/sites-enabled/$1
echo "<virtualhost \${HOSTING_HOST}:$2>"
echo " ServerName $1"
echo " ServerAdmin $hostmaster"
echo " "
echo " DocumentRoot \${HOSTING_ROOT}/$1/www/"
echo " <Directory />"
echo " Options Indexes Includes FollowSymLinks MultiViews"
echo " Order allow,deny"
echo " AllowOverride All"
echo " Allow from All"
echo " </Directory>"
echo " "
echo " <Directory \${HOSTING_ROOT}$1/www/>"
echo " Options Indexes Includes FollowSymLinks MultiViews"
echo " Order allow,deny"
echo " AllowOverride All"
echo " Allow from All"
echo " </Directory>"
echo " "
echo " ScriptAlias /cgi-bin/ \${HOSTING_ROOT}/$1/cgi-bin/"
echo " <Directory \${HOSTING_ROOT}/$1/cgi-bin/>"
echo " AllowOverride None"
echo " Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch"
echo " Order allow,deny"
echo " Allow from all"
echo " </Directory>"
echo " "
echo " ErrorLog \${HOSTING_ROOT}/$1/log/error.log"
echo " LogLevel warn"
echo " CustomLog \${HOSTING_ROOT}/$1/log/access.log combined"
echo " ServerSignature On"
echo " "
echo "</virtualhost>"
exec 1>&3
echo "\nДобавляю хост в: /etc/nginx/sites-enabled/$1"
exec 3>&1 1>/etc/nginx/sites-enabled/$1
echo "server {"
echo " listen 80;"
echo " server_name $1;"
echo " "
echo " #charset koi8-r;"
echo " "
echo " access_log $www_path$1/log/$1-nginx.access.log main;"
echo " "
echo " location / {"
echo " proxy_pass http://127.0.0.1:$2/;"
echo " proxy_redirect off;"
echo " proxy_set_header Host \$host;"
echo " proxy_set_header X-Real-IP \$remote_addr;"
echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"
echo " client_max_body_size 40m;"
echo " client_body_buffer_size 256k;"
echo " "
echo " proxy_connect_timeout 120;"
echo " proxy_send_timeout 120;"
echo " proxy_read_timeout 120;"
echo " proxy_buffer_size 64k;"
echo " proxy_buffers 4 64k;"
echo " proxy_busy_buffers_size 64k;"
echo " proxy_temp_file_write_size 64k;"
echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"
echo " }"
echo " #Static files location"
echo " location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|html|flv|mp3)$ "
echo " {"
echo " root $www_path$1/www/;"
echo "}"
echo "}"
exec 1>&3
sleep 1
echo "Перезапуск вэбсервера"
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
echo "Домен создан;)"
echo "Теперь вы можете перейти по адресу http://$1"
;;
esac
Разберемся немного с кодом:
- Если Вы решили «скопипастить» скрипт — удалите обратный слэш в «<\/Directory>». Я добавил обратный слэш, дабы редактор не съедал строку.
- Я использую frontend/backend технологию, поэтому каждый отдельный хост сидит на отдельном порту апача для проксирования его NGINX-ом.
Listen 8080
Listen 8081
Listen 8082
Listen 8083
#И_так_далее
${HOSTING_HOST} и ${HOSTING_ROOT} — переменные Apache2. Они мне нужны.
Вместо них вы можете использовать свои переменные или явно указать адреса/пути.
Так же замечу что ${HOSTING_ROOT} имеет то же значение что и $www_path, поэтому можно использовать и ее.
Теперь когда мы со всем разобрались — запускаем
sudo ./addvhost.sh test.ru 8080
где «test.ru» — имя нашего домена (присваивается $1), а «8080» — порт на котором у нас будет сидеть этот тестовый домен (присваивается $2).
Что имеем в итоге: у нас автоматически создаются директории для виртуальных хостов. Конфиги виртуальных хостов для Apache и Nginx c нужными нам параметрами так-же автоматом генерируются, складываются куда надо и перезапускаются сервисы. Проффит.
PS. Конечно данный скрипт очень примитивен и не претендует на оригинальность, но все же способен значительно облегчить жизнь начинающему разработчику или администратору.
Для локальной разработки я использую MAMP Pro. Весь описаный выше функционал, и даже больше, там доступен через красивый и удобный GUI, но не все работает на Mac и не всегда, а жить как-то надо.
PPS. Как вариант — можно использовать шаблоны конфигурационных файлов вместо echo «каждой строчки». Но мне пока и так нормально.
Будет время — доработаю и выложу.
UPD — Новая версия скрипта с использованием шаблонов конфигов доступна здесь
«Полотенце» из echo заменено на обычный sed -e. Скрипт стал более гибким и простым.
UPD II — Обновил скрипт и статью. Статью с учетом подсветки кода, а в скрипте порпавил некоторые баги.