Разное

Apache2 virtualhost: Как настроить виртуальные хосты в Apache на Ubuntu 16.04

Содержание

Как настроить виртуальные хосты в Apache на Ubuntu 16.04

Введение

Веб-сервер Apache является самым популярным средством размещения веб-контента в интернете. На его счету более половины всех действующих веб-сайтов. Это очень мощный и гибкий инструмент.

Apache разделяет свои функциональные возможности и компоненты на отдельные части, которые могут быть настроены и сконфигурированы независимо друг от друга. Базовая часть, которая отвечает за отдельный сайт или домен называется виртуальным хостом (virtual host).

Эта система позволяет администратору использовать один сервер, чтобы раздавать несколько сайтов используя один интерфейс или IP. Это удобно для тех, кто хочет использовать один VPS для хранения нескольких сайтов.

Каждый настроенный соответствующим образом домен будет направлять пользователя к определенной директории сервера, содержащей информацию этого сайта, соответствующего домену. Эта схема может расширяема без каких-либо ограничений со стороны программного обеспечения до тех пор, пока сервер будет справляться с нагрузкой.

В этом руководстве мы расскажем, как настроить виртуальные хосты в Apache на VPS с Ubuntu 16.04. В процессе вы узнаете, как отображать разный контент для разных пользователей в зависимости от того, какой домен они запрашивают.

Необходимые условия

Перед тем, как приступать, вам необходимо создать не-рутового пользователя, как описано в шагах 1-4.

Также у вас должен быть установлен Apache, чтобы проделать описываемые ниже шаги. Если он еще не установлен, вы можете сделать это при помощи команды apt-get:

  • sudo apt-get update
  • sudo apt-get install apache2

После завершения этих шагов, мы можем начать настройку виртуальных хостов.

В этом руководстве мы создадим виртуальные хосты для доменов example.com и test.com. Мы будет ссылаться на них в руководстве, однако вам следует заменить их на свои домены при настройке ваших виртуальных хостов.

Для настройки доменных имен в DigitalOcean перейдите по этой ссылке. Если у вас нет свободных доменов, на которых можно потренироваться, вы можете использовать фиктивные доменные имена.

Чуть позже мы покажем, как отредактировать файл с локальными хостами для проверки конфигурации в случае, если вы используете фиктивные доменные имена. Это позволит протестировать конфигурацию с вашего домашнего компьютера, даже несмотря на то, что контент сайта не будет доступен по этому доменному имени другим пользователям.

Шаг 1 — Создание структуры директорий

Первый шаг, который мы собираемся предпринять, это создать структуру директорий, содержащую данные сайта, которые будут отображаться посетителям.

Наш document root (корневой каталог — директория верхнего уровня, которую просматривает Apache в поисках контента для отображения) будет настроен на использование директорий внутри директории /var/www. Здесь мы создадим директории для обоих виртуальных хостов, которые мы планируем сделать в этом руководстве.

В каждой из этих директорий мы создадим вложенную директорию 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 — Создание демо-страниц для каждого виртуального хоста

Наша структура директорий готова. Давайте создадим какой-нибудь контент для отображения посетителям наших сайтов.

Мы делаем это просто для демонстрации, потому страницы будет очень простыми. Мы собираемся создать по странице index.html для каждого сайта.

Давайте начнем с example.com. Мы можем создать и открыть файл index.html в редакторе, введя команду:

  • nano /var/www/example.com/public_html/index.html

В этом файле создайте простой HTML-документ, который показывает, к какому сайту он относится. Наш файл выглядит следующим образом:

/var/www/example.com/public_html/index.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

/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 по умолчанию требует, чтобы каждый файл виртуального хоста заканчивался расширением .conf.

Создание файла первого виртуального хоста

Начнем с копирования файла для первого домена:

  • 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

Файл будет похож на этот (мы удалили комментарии, чтобы сделать его более читабельным):

/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 так, чтобы она ссылалась на созданную нами директорию:

DocumentRoot /var/www/example.com/public_html

Теперь наш файл виртуального хоста должен выглядеть следующим образом:

/etc/apache2/sites-available/example.com.conf

<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

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

/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 — Включение новых виртуальных хостов

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

Мы можем использовать утилиту a2ensite для включения каждого из наших сайтов следующим образом:

  • sudo a2ensite example.com.conf
  • sudo a2ensite test.com.conf

Далее деактивируем сайт по умолчанию 000-default.conf:

  • sudo a2dissite 000-default.conf

После завершения необходимо перезапустить Apache, чтобы изменения вступили в силу:

  • sudo systemctl restart apache2

В других источниках документации вы можете увидеть такое пример использования команды service:

  • sudo service apache2 restart

Эта команда работает так же, но при этом вы можете не получить вывод, как при использовании других систем, потому что теперь эта команда представляет собой обёртку вокруг systemctl.

Шаг 6 — Настройка файла локальных хостов (опционально)

Если до этого вы использовали не реальные доменные имена, которыми вы владеете, а тестовые, вы можете протестировать работоспособность виртуальных хостов, временно изменив файл hosts на вашем локальном компьютере.

Это позволит перехватывать любой запрос к доменам, которые вы настроили и перенаправлять его на ваш VPS сервер так, как это сделала бы система DNS в случае использования реально зарегистрированных доменов. Это будет работать только с вашего локального компьютера и используется только для тестирования.

Убедитесь, что дальнейшие шаги вы будете проделывать на вашем локальном компьютере, а не на VPS сервере. Вам необходимо знать пароль администратора или быть членом группы администраторов.

Если вы используете компьютер с Mac или Linux, вы можете редактировать локальный файл с правами администратора, введя команду:

Если у вас компьютер с Windows, вы можете найти инструкции по редактированию файла хостов здесь.

Вам необходимо добавить в файл публичный 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

Вы должны увидеть похожую страницу:

Аналогично, вы можете зайти на вторую страницу:

http://test.com

Вы увидите файл, созданный для второго сайта:

Если оба сайта работают, значит вы успешно сконфигурировали два виртуальных хоста на одном и том же сервере.

Если вы вносили изменения в файл hosts на вашем локальном компьютере, теперь можете удалить добавленные строки, т.к. уже убедились в работоспособности конфигурации. Таким образом мы не будем хранить в файле “hosts” ненужные записи.

Если вы хотите, чтобы пользователи могли осуществлять доступ к вашим сайтам на постоянной основе, рассмотрите возможность приобретения доменных имен для своих сайтов и их настройки для работы с вашим VPS сервером.

Заключение

Если вы следовали нашим инструкциям, теперь у вас должен быть один сервер, работающий с двумя разными доменными именами. Для добавления других виртуальных хостов следуйте инструкциям в этом руководстве.

Apache может работать с любым количеством доменных имен, так что можете добавлять новые сайты до тех пор, пока ваш сервер справляется с нагрузкой.

Настройка виртуальных хостов в Apache 2 ▷ Virtualhost Apache в Ubuntu, Linux, Debian

Если возникла необходимость размещения на Linux VPS сервере нескольких сайтов, то Apache для этих целей предоставляет возможность настройки виртуальных хостов (virtual hosts). Виртуальные хосты бывают двух видов: name-based virtual hosts, то есть привязанные к доменному имени, и IP-based virtual hosts, то есть привязанные к IP-адресу. Виртуальные хосты первого типа используют разные имена для одного IP-адреса, а второго типа – используют для каждого сайта отдельный IP-адрес. Создание виртуальных хостов в Apache необходимы, если на вашем сервере есть несколько сайтов, а их настройка необходима для корректного отображения всех сайтов.

Наиболее распространенным является использование виртуальных хостов на базе имен (name-based virtual hosts), привязанных к одному IP-адресу. Таким образом, можно хранить множество сайтов на одном IP.

Самым простым способом добавления и последующей настройки виртуальных хостов Apache является редактирование конфигурационного файла веб-сервера, который имеет разные названия и места расположения в зависимости от операционной системы:

В Red-Hat/CentOS/Fedora:

/etc/httpd/conf/httpd.conf 

Debian/Ubuntu:

/etc/apache2/apache2.conf

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

В Red-Hat/CentOS/Fedora:

/etc/httpd/conf.d/filename.conf, 

Debian/Ubuntu:

/etc/apache2/conf.d/filename.conf. 

Как правило, в конфигурационном файле httpd.conf или apache2.conf раздел управления виртуальными хостами располагается в самом конце. Для добавления виртуального хоста нужно будет открыть этот файл и раскомментировать в нём (убрать #) директиву NameVirtualHost *:80 (Аргумент * обозначает «все имена хостов»). Если будет использоваться способ размещения конфигурации в conf.d, то указанную директиву не нужно раскомментировать, а следует определить её в самом создаваемом файле.

После NameVirtualHost следует блок VirtualHost *:80. Подобные блоки и являются конфигурацией ваших виртуальных хостов. Выглядит это все примерно следующим образом:

NameVirtualHost *:80

<Directory var/www/>
AllowOverride All
Options All
</Directory>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/site1.ru
    ServerName site1.ru
    ServerAlias www.site1.ru
    ErrorLog logs/site1.ru-error_log
    CustomLog logs/site1.ru-access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/site2.ru
    ServerName site2.ru
    ServerAlias www.site2.ru	
    ErrorLog logs/site2. ru-error_log
    CustomLog logs/site2.ru-access_log common
</VirtualHost>


Именно здесь и производятся все настройки виртуальных хостов, а также, подключение или отключение определенных опций.

Рассмотрим более детально, за что отвечает каждая указанная выше директива.

1. Директива ServerAdmin указывает электронный адрес администратора сервера, на который приходят все уведомления с хоста, касающиеся его администрирования.

2. Директива DocumentRoot указывает корневую директорию с файлами сайта, которые должны будут выдаваться веб-сервером клиенту (браузеру).

3. Директива Server Name определяет имя хоста, по запросу которого должны будут выдаваться файлы, расположенные в DocumentRoot.

4. Директива ServerAlias служит для задания альтернативных имен хоста (алиасов, псевдонимов), на которые он откликается.

5. Директива ErrorLog задает файлы протоколов ошибок для каждого хоста, а CustomLog – файлы протоколов для всего остального, кроме ошибок.

До блоков с виртуалхостами, как вы заметили, есть еще запись:

<Directory var/www/>
AllowOverride All
</Directory>

В тегах <Directory> </Directory> заключается перечень директив (параметров), которые будут применяться к конкретной директории, которая указывается в открывающем теге. В примере выше – это var/www/. Указанная директива AllowOverride указывает, использовать ли файлы .htaccess и если да, то какие глобальные директивы веб-сервера в можно переопределять в таких файлах. В представленном выше примере значение AllowOverride установленно в All, что разрешает обрабатывать файлы .htaccess и все указанные в нём директивы. Существуют и другие возможные значения:

AuthConfig – разрешает использовать директивы авторизации (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require, и т.д..).

FileInfo – разрешает использовать директивы, управляющие типами документов (AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority, и т. д..).

Indexes — разрешает использовать директивы для управления индексацией каталогов (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, и т.д..).

Limit — разрешает использовать директивы управления доступом (allow, deny и order).

Options — разрешает использовать директивы, с помощью которых можно управлять специфическими особенностями каталога (Options и XBitHack).

Это одна из многих возможных директив, с которыми вы можете ознакомиться на сайте разработчиков.

После сохранения изменений в файле необходимо проверить новые настройки на наличие ошибок. Для выполнения проверки можно использовать следующие команды:

apachectl configtest
apachectl -S
apachectl -d

Если получено сообщение “Syntax OK”, значит ошибок нет и можно перезагружать веб-сервер, чтобы применились изменения. Сделать это можно с помощью следующих команд:

Red-Hat/CentOS/Fedora:

service httpd restart

или

/etc/init. d/ httpd restart

Debian/Ubuntu:

service apache2 restart

или

/etc/init.d/apache2 restart

Далее вы можете столкнуться со следующей проблемой. При поступлении запроса Apache проходит по всему списку виртуальных хостов в поисках соответствующего, и, если не находит соответствия, выдает первый по порядку хост. Чтобы устранить данную неприятность, специалисты придумали так называемую секцию-заглушку, которую следует вставить перед первой секцией VirtualHost реального сайта. Выглядит она приблизительно следующим образом:

<VirtualHost *:80> 
   ServerName default
   DocumentRoot /var/www/default 
</VirtualHost> 

Таким образом, все неправильные запросы будут отсылаться по пути var/www/default, где можно создать индексную страницу, которая будет сообщать о неправильном запросе.

Также, Apache по умолчанию не имеет доступа к вашим домашним директориям, а только к директории /var/www. Если вы используете на своем сервере SElinux, то для предоставления Apache доступа к домашним директориям используйте следующие команды:

setsebool -P httpd_enable_homedirs 1

или

setsebool -P apache2_enable_homedirs 1

Для того чтобы Apache имел доступ к определенной директории, например, к /home/mydir следует использовать команду:

chcon -R -t httpd_sys_content_t /home/mydir

или

chcon -R -t apache2_sys_content_t /home/mydir

При отключенном SELinux для предоставления Apache доступа к той или иной домашней директории сайта, вам нужно будет вручную отредактировать его конфигурационный файл (/etc/httpd/conf/httpd.conf в CentOS/Fedora или /etc/apache2/apache2.conf в Debian/Ubuntu).

Открыв конфигурационный файл веб-сервера для редактирования, найдите строку DocumentRoot (при использовании редактора nano ее можно отыскать с помощью комбинации клавиш Ctrl+W). Замените значение в кавычках /var/www/html на абсолютный путь к домашней директории сайта (например, /home/username/site.com). Сохраните изменения и выйдите из меню редактора (Ctrl+O и Ctrl+X). Перезапустите Apache.

Если у вас на VPS установлена ОС Debian/Ubuntu, то править строку DocumentRoot необходимо в файле /etc/apache2/sites-available/default. Откройте его для редактирования и замените стандартное значение /var/www на абсолютный путь к домашней директории сайта. Выполните перезапуск веб-сервера.

На этом базовая настройка виртуальных хостов окончена.

 

Настройка virtualhost в apache2 как сделать виртуальный хост

Для настройки виртуальных хостов на web сервере apache2 под ubuntu 7.10, 8.04, 8.10, 9.04, 9.10, Debian 5 необходимо в самое начало или конец (вне инструкций ) файла /etc/apache2/sites-available/default добавить директиву:

NameVirtualHost 192.168.0.1

Там необходимо указать IP адрес либо DNS имя компютера на котором размещён вебсервер, можно указать localhost или 127. 0.0.1

Затем, учитывая организацию конфигов apache2 в Debian, необходимо создать файл виртуального хоста в директории: /etc/apache2/sites-available/
например ваш сайт называется supebreys.ru, значит логичнее создать чтото вроде /etc/apache2/sites-available/supebreys_ru.conf. В любом случае это название должно вам говорить для чего этот файл и будет лучше если вы будете придерживаться какого то одного правила создания таких файлов. Затем в этот файл добавляем такой текст:

<VirtualHost *:80>
        DocumentRoot "/home/httpd/breys.ru/www"
        ServerName    breys.xxx
        <Directory />
                allow from all
                Options +Indexes
       </Directory>
        ScriptAlias /cgi-bin/ "/home/httpd/breys.ru/cgi-bin/"
        CustomLog  /home/httpd/breys.ru/access.log common
        ErrorLog /home/httpd/breys.ru/error.log
</VirtualHost>

Здесь мы создали виртуальный хост которых будет обрабатывать запросы на 80 порту с любого доступного адреса

Также тут указана корневая директория сайта, директория с cgi скриптами и пути к файлам журналов работы вебсервера

Для корневой директори указаны дополнительные(необязательные) опции: разрешение доступа с любого адреса и включение модуля обработки индексного файла, в принципе эти опции не обязательны и нужны только если прихоится переопределять глобальные политики доступа и загрузки модулей вебсервером

После создания этого файла веб сервер ещё не видит его. Если внимательно посмотреть на файлы в директориях /etc/apache2/sites-enabled/ и /etc/apache2/sites-available/ то должно стать ясно, то что в директории /etc/apache2/sites-available лежат файлы описывающие виртуальные хосты, а в папке/etc/apache2/sites-enabled/ лежат симлинки на файлы в sites-available.  Исходя из названий становится ясно, что:
sites-available — все доступные виртуальных хосты
sites-enabled — включаемые вебсервером
то есть, чтобы добавить виртульный хост в apache2, необходимо либо создать файл нового виртуального хоста в sites-available либо дописать(не желательно) его в уже имеющийся там файл, а чтобы включить виртуальный хост, необходимо чтобы директории sites-enabled была ссылка на файл описывающий виртуальных хост

Это сделанно для того, чтобы разделить виртуальные домены на уровне хостинга. Например, хостер чтобы временно удалить какой то домен удаляет ссылку из папки sites-enabled и перезапускает вебсервер и так же быстро включает домен снова, без правки единого конфига, как это было реализованно ранее.

Итак, включаем наш, только что созданный, новых виртуальный хост:

ln -s /etc/apache2/sites-available/breys_ru.conf /etc/apache2/sites-enabled/breys_ru.conf

Этой командой мы создаём симлинк(символическую ссылку на один файл в другой директории) на рабочий файл виртуального хоста, который будет обработан при следующем перезапуске вебсервера

Возможно вам потребуется расширить поведение вашего виртуального хоста — может потребоваться чтобы он был доступен по нескольким адреса

Например, у меня имеются зеркала моих сайтов и я работаю с ними дома используя имена сайтов + моя домашняя зона .xxx, тоесть для сайта breys.ru у меня есть домашнее зеркало breys.xxx, но вполне вероятна ситуация когда нужно показать зеракло ещё кому то, тогда я могу использовать DNS зону зарегистрированную за мной на DYNDNS.COM, тоесть это зеркало имеет дополнительный адрес в виде:breys.ffsdmad.homelinux.org, ещё более частая ситуация когда нужно иметь имя www.breys.ru и соответственноwww. breys.ffsdmad.homelinux.org
Чтобы включить этого необходимо в файл виртального хоста, внутри инструкций .. добавить список необходимых алиасов:

<VirtualHost *:80>
....другие инструкции
 ServerName breys.xxx
 ....
 ServerAlias www.breys.xxx
 ServerAlias breys.ffsdmad.homelinux.org
 ServerAlias www.breys.ffsdmad.homelinux.org
 ....
</VirtualHost>

Вполне возможно придётся заниматься отладкой модуля mod_rewrite, для этого необходимо в файл виртуального хоста добавить строки:

<VirtualHost *:80>
....другие инструкции
RewriteLog /home/httpd/breys.ru/rewrite.log
RewriteLogLevel 9
</VirtualHost>

Начните с небольшого примера и постепенно расширяйте возможности своего виртуального хостинга различными возможностями вебсервера apache2 (а их у него предостаточно) и постепенно вы поймёте насколько проста и логична такая структура в условиях такого сложного сервиса как вебхостинг

Также следует заметить, что если вы поставили на локальную машину сервер apache2 и виртуальные хосты прописаны в /etc/hosts (соответствия имени ip адресу), то начинаются тормоза при обращении к вебсерверу. Дело в том, что браузер сначала пытается распознать ip адрсе у dns сервера, который у вас прописан в /etc/resov.conf, а не проверять файл /etc/hosts. Это можно исправить заменив в файле /etc/host.conf последовательность перебора сервисов разрешения имён, но лучше всего настроить bind и забыть про тормоза и проблемы с обратным разрешением имени по IP

Вот тут можно прочитать как настроить bind для домашней сети, а здесь можно взять скрипт автоматического создания виртуальных хостов в условиях домашнего хостинга

Эта заметка висит здесь уже второй год и на неё не прекращается поток запроса, а это наталкивает меня на мысль, что люди не могут разобраться с этой системой, а значит нужно объяснять ещё более доходчиво, в этоге эта заметка переписывалась уж три раза

Если у вас остались или возникли какие то вопросы или неясности, не стесьняйтесь, спрашивайте, система коментариев мгновенно оповещает меня через Jabber, таким образом я реагирую практически моментально

 

Apache: примеры создания VirtualHost

Что такое VirtualHost можно почитать на Wiki.

Все примеры приведены в системе FreeBSD 8.2 и Apache 2.2, но подойдут для любой другой ОС (учтите только другие пути к файлам конфигурации).

В статье не будут рассмотрены вопросы создания и настройки доменов и субдоменов на DNS — это совсем другая тема. Если вы не используете свой собственный DNS и не знаете как настроить домен — проще всего воспользоваться этой>>> ссылкой или спросить совета у вашего регистратора доменного имени.

Для примеров используются следующие данные:

2 IP-адреса:

77.120.106.40
77.120.106.52

2 домена и 1 субдомен:

it-news.in.ua
website.co.ua
vhost1.website.co.ua

Для простоты, все пути к служебным каталогам остаются по-умолчанию, т.е. такими, какие они были после установки Apache:

ServerRoot «/usr/local»
DocumentRoot «/usr/local/www/apache22/data»

Если планируется создание только одного VirtualHost-а, то все записи можно производить прямо в файле /usr/local/etc/apache22/httpd. conf. Но правильнее будет все настройки виртуалов хранить в файле /usr/local/etc/apache22/httpd-vhosts.conf. Для этого, в конце файла /usr/local/etc/apache22/httpd.conf раскомментируйте строку:

#Virtual hosts
#Include etc/apache22/extra/httpd-vhosts.conf

Запуск нескольких name-based виртуалов на одном IP-адресе

#Укажем Apache слушать порт 80
Listen 80

#Слушать запросы к виртуалам на всех IP-адресах:
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot www/apache22/data/website.co.ua
ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot www/apache22/data/it-news.in.ua
ServerName www.example.org
</VirtualHost>

В этом примере website.co.ua находится первым в списке виртуалхостов, поэтому в случае, если к серверу придет запрос без определённого ServerName, то будет показано содержимое website.co.ua.

Если вы хотите, то можно указать реальный IP-адрес сервера, в таком случае параметр VirtualHost должен совпадать с NameVirtualHost:

NameVirtualHost 77. 120.106.40
<VirtualHost 77.120.106.40:80>

</VirtualHost>

Но, как правило, используется параметр *, обозначающий любой IP-адрес. Это полезно, например, если вы используете услугу типа No-Ip, позволяющую привязать динамический IP-адрес к домену.

Name-based хосты на сервере с несколькими IP-адресами

У сервера есть два IP-адреса: 77.120.106.40 и 77.120.106.52.  Запустим 1 «главный» сайт, и несколько «вторичных»:

Listen 80
# Это «главный» сайт, работающий на IP-адресе 77.120.106.40
ServerName website.co.ua
DocumentRoot www/apache22/data/website.co.ua

# А это «вторичные» сайты:
NameVirtualHost 172.20.30.50
<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/vhost1.website.co.ua
ServerName vhost1.website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/it-news.in.ua
ServerName it-news. in.ua
</VirtualHost>

Все запросы на адреса, отличные от 77.120.106.52 будут переданы «главному» сайту. Все запросы к 77.120.106.52 с неуказанным HostName будут переданы к website.co.ua.

Обслуживание одного виртуала по разным IP-адресам (например, локальной и внешней сети)

У сервера есть две сети с двумя разными адресами — 77.120.106.40 (внешняя сеть) и 192.168.0.1 (внутренняя сеть). Из мира адрес  website.co.ua направлен на 77.120.106.40, а изнутри имя server направлено на 192.168.0.1. По обоим запросам, как из внешней сети, так и из внутренней, сервер будет выдавать содержимое одного и того же виртуалхоста:

NameVirtualHost 192.168.0.1
NameVirtualHost 77.120.106.40

<VirtualHost 192.168.0.1 77.120.106.40>
DocumentRoot www/apache22/data/website.co.ua
ServerName website.co.ua
ServerAlias server
</VirtualHost>

Обслуживание разных сайтов на разных портах

Можно обрабатывать запросы к разным  и/или одинаковым доменам на разные порты, выдавая разное содержимое:

Listen 80
Listen 8080

NameVirtualHost 77. 120.106.40:80
NameVirtualHost 77.120.106.40:8080

#по запросу website.co.ua и стандартному http-порту 80 выдаем
#содержимое каталога /usr/local/www/apache22/data/www/website.co.ua-80
<VirtualHost 77.120.106.40:80>
ServerName website.co.ua
DocumentRoot www/apache22/data/www/website.co.ua-80
</VirtualHost>

#по запросу website.co.ua и не-стандартному http-порту 8080 выдаем
#содержимое каталога /usr/local/www/apache22/data/www/website.co.ua-8080
<VirtualHost 77.120.106.40:8080>
ServerName website.co.ua
DocumentRoot www/apache22/data/www/website.co.ua-8080
</VirtualHost>

#то же самое, на том же сервере, но для домена it-news.in.ua
<VirtualHost 77.120.106.40:80>
ServerName it-news.in.ua
DocumentRoot www/apache22/data/www/it-news.in.ua-80
</VirtualHost>

<VirtualHost 77.120.106.40:8080>
ServerName it-news.in.ua
DocumentRoot www/apache22/data/www/it-news.in.ua-8080
</VirtualHost>

IP-based виртуалхосты

У сервера есть два IP-адреса и два домена: it-news. in.ua с адресом 77.120.106.40 и website.co.ua с адресом 77.120.106.52:

Listen 80

<VirtualHost 77.120.106.40>
DocumentRoot www/apache22/data/www/it-news.in.ua
ServerName it-news.in.ua
</VirtualHost>

<VirtualHost 77.120.106.52>
DocumentRoot www/apache22/data/www/website.co.ua
ServerName website.co.ua
</VirtualHost>

Смешанные port-based и ip-based виртуалхосты

Listen 77.120.106.40:80
Listen 77.120.106.40:8080
Listen 77.120.106.52:80
Listen 77.120.106.52:8080

<VirtualHost 77.120.106.40:80>
DocumentRoot www/apache22/data/www/website.co.ua-80
ServerName website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.40:8080>
DocumentRoot www/apache22/data/www/website.co.ua-8080
ServerName website.co.ua
</VirtualHost>

<VirtualHost 77.120.106.52:80>
DocumentRoot www/apache22/data/www/it-news.in.ua-80
ServerName it-news. in.ua
</VirtualHost>

<VirtualHost 77.120.106.52:8080>
DocumentRoot www/apache22/data/www/it-news.in.ua-8080
ServerName it-news.in.ua
</VirtualHost>

В статье использовалась документация с официального сайта веб-сервера Apache.

Настройка virtualhost на apache2 | Все о WEB программировании Все о WEB программировании


Ромчик

1

Доброго времени суток дорогой читатель блога “WEB программирование от А до Я”. Сегодня мы немного отойдем от web программирования и поговорим об инструментах web разработчика. А точнее мы остановимся на virtualhost для apache2. Многие разработчики делают и поддерживают несколько проектов. Так, например, у меня есть проект на Joomla, другой проект на WordPress, а также есть несколько тестовых проектов на, которых я оттачиваю мастерство. И тут возникает вопрос: “А как на одной машине развернуть несколько хостов?” Дальше я постараюсь наиболее понятно ответить на данный вопрос.
Небольшое замечание на моей рабочей машине стоит операционная система Ubuntu, сервер apache2. Поэтому и настройки virtualhost я буду приводить для этой связки. Но разницы между конфигурацией virtualhost на ubuntu ни чем не будет отличаться от конфигурации virtualhost на Windows или какой либо другой операционной системы. Одно отличие это расположение конфигурационных файлов для virtualhost. А теперь давайте приступим…

Сразу хочу отметить, что apache2 у Вас уже установлен. В Ubuntu apache устанавливается из репозитория. Для Windows существуют пакеты Denver и XAMPP.
Теперь давайте разберемся с понятием virtualhost. Virtualhost — это размещение нескольких хостов на  одной машине.

Конфигурационные файлы apache2 в ubuntu находятся в /etc/apache2
Файл apache2.conf — это основной файл конфигурации.
А виртуальные хосты находятся в папке /etc/apache2/sites-available
Для каждого виртуального хоста в данной папке есть свой конфигурационный файл.
Но это актуально для ubuntu. Для других операционных систем настройки virtualhost содержаться в самом файле конфигурации apache2 apache2.conf в разделе <VirtualHost>.
Любое описание виртуального хоста начинается с <VirtualHost> и заканчивается </VirtualHost>.  Это обязательно!!!
Также virtualhost вы можете привязать к определенному ip-адресу и порту. Это делается следующим образом:



<VirtualHost <ip>:<port>>
настройка virtualhost
</VirtualHost>


или привязать один virtualhost к нескольким ip-адресам:


<VirtualHost <ip> <ip>:<port>>
настройка virtualhost
</VirtualHost>

Давайте приведем пример действующего virtualhost:


<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName kohana
    ServerAlias kohana
    DocumentRoot /var/www/kohana
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/kohana>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/www/kohana/error. log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/www/kohana/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

И разберем каждую строчку:

  1. <VirtualHost *:80> — этот тег обозначает, что дальше будут следовать настройки виртуального хоста. Виртуальный хост будет срабатывать при обращении на любой адрес по порту 80.
  2. ServerAdmin — директива содержит e-mail адрес администратора данного хоста и будет показываться в сообщениях об ошибке. В нашем случае — это webmaster@localhost
  3. ServerName — эта директива определяет имя хоста и порт, по которому сервер идентифицирует себя. Это необходимо при создании URL. Так, например, у Вас есть хост first.example.com, а сервер имеет еще название www.example.com и Вы хотите, чтоб веб-сервер определял Ваш хост и по этому имени, тогда в этой директиве должны прописать ServerName www.example.com
  4. ServerAlias — данная директива устанавливает альтернативные имена хостов.
  5. DocumentRoot — директива устанавливает каталог, где находятся файлы для обработки apache2. Т.е. в данном каталоге хранятся Ваши файлы сайта.
  6. <Directory /> в данной директиве мы можем прописать различные правила для каталога. Данная директива обязательна должна закрываться тегом </Directory>. Так например, мы прописываем правила для каталога home:

<Directory /home/>
AllowOverride FileInfo
</Directory>

Также в пути к каталогу мы можем применять и регулярные выражения.
Теперь давайте рассмотрим какие правила мы можем прописать в данной директиве

  • AllowOverride данный параметр может содержать следующие значения: None — тогда файл . htaccess будет полностью игнорироваться, All — тогда в .htaccess допускаются все директории.
  • Options — устанавливает особенности сервера для данного каталога. Может принимать следующие значения: None — тогда ни одна из опций не допускается, All — допускаются все опции кроме MultiViews, ExecCGI — разрешает выполнение CGI скриптов, FollowSymLinks  -сервер будет следовать за символическими связями, Includes — разрешается Server-Site-Includes (SSI), IncludesNOEXEC — разрешается SSI, но запрещается комманды #exec и #include CGI скриптов, Indexes — если по ссылке в каталоге ничего не найдено, то сервер возвратит содержание каталога, MultiViews — разрешает MultiViews (действие MultiViews заключается в следующем пользователь в адресной строке набирает <каталог_1>/<каталог_2> и если вдруг <каталог_2> не существует, то сервер ищет в <каталог_1> файл <каталог_2>.*), SymLinksIfOwnerMatch — сервер будет следовать только тем символическим связям, для которых целевой файл или каталог имеют тот же идентификатор пользователя что и связь.
  • Order — данной директивой мы устанавливаем порядок проверки, т.е. в начале проверяем на запрет и если все у нас проходит, то разрешаем
  • Deny — в данной директиве мы указываем доступ к серверу на основе хоста или ip-адреса. В данной директиве мы перечисляем запрещенные хосты
  • allow — в данной директиве мы указываем доступ к серверу, перечисляем разрешенные хосты.
  1. ErrorLog — в данной директиве мы указываем путь к файлу логов.
  2. LogLevel — в данной директиве мы указываем уровень сообщений, которые будут записываться в лог-файл. Существуют следующие уровни:
  • emerg — чрезвычайные ситуации — система непригодна для использования.
  • alert  — действий должны быть приняты немедленно.
  • crit — критическое условие.
  • error — возникновение ошибки.
  • warn — предупреждения.
  • notice — нормальное состояние.
  • info — информация.
  • debug — debug сообщения
  1. CustomLog — директива в которой указываем путь к файлу логов, где регистрируются запросы к серверу.

Фуф, с файлом конфигурации для virtualhost мы разобрались.
Теперь давайте создадим виртуальный хост. Для этого в Ubuntu в папке /etc/apache2/sites-available/ создаем файл с названием нашего хоста например test. И помещаем туда следующий код:


<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName test
    ServerAlias test
    DocumentRoot /var/www/test
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/test>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/www/test/error. log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/www/test/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

Теперь в папке /var/www/ создаем папку test (тут и будут находиться файлы нашего virtualhost)
Кофигурацию для нашего хоста мы создали. Осталось включить этот виртуальный хост. Для этого вводим команду:


sudo a2ensite test

Перезагрузить сам apache:


sudo /etc/init.d apache2 restart

И все наш virtualhost работает.
Давайте в файле /etc/hosts добавим строку 127.0.0.1    test
Теперь введя в браузере адрес test мы попадаем на virtualhost на нашем локальном сервере.
На этом настройка virtualhost на apache2 завершена. Если у Вас появились вопросы, то пишите в комментариях я обязательно на них отвечу.
И не забывайте следить за обновлениями на моем блоге, подписавшись на RSS-рассылку.

Понравилась статья? Поделись с друзьями.

Как создать Apache virtualhost на CentOS 7

VPS

access_time

22 ноября, 2017

hourglass_empty

2мин. чтения

Вступление

Если вы хотите разместить более одного домена на своём сервере, вам нужно создать соответствующие хосты на веб-сервере, так чтоб сервер мог знать, какой контент должен быть обслужен по входящему запросу. В этом руководстве вы изучите как создавать виртуальные хосты или Apache virtualhost на CentOS 7.

Что понадобится

Прежде, чем приступить к действиям из руководства, проверьте наличие:

  • SSH доступа на VPS от имени root-пользователя

Шаг 1 – Установка Apache

Первым делом, вам нужно установить Apache на вашей CentOS7-машине (пропустите этот шаг, если вы его уже установили). Apache может быть легко установлен со стандартных репозиториев CentOS следующей командой:

sudo yum -y install httpd

Как только установка завершена, включите Apache как сервис CentOS:

sudo systemctl enable httpd.service

Теперь Apache будет автоматически стартовать после перезагрузки сервера.

Шаг 2 – Создание дерева каталогов

Теперь вам надо создать дерево каталогов, которое будет использоваться для хранения данных веб-сайтов. Установите рабочую директорию на /var/www запуском этой команды:

cd /var/www/

Вам нужно использовать уникальный корневой каталог документов для каждого создаваемого виртуального хоста Apache virtualhost. В этом руководстве yourdomain.com будет использоваться как пример домена, пожалуйста, замените его на свой домен. Запустите эту команду для создания директории для нового хоста:

mkdir -p yourdomain.com/public_html

Теперь, запустите chown для изменения прав владения директорией и chmod для установки правильных разрешений для всей веб-директории, для того, чтобы они были доступны должным образом для Apache:

chown -R apache:apache /var/www/yourdomain. com/public_html
chmod -R 755 /var/www

У Apache теперь есть необходимый доступ для обслуживания контента входящих запросов и создания дополнительных директорий.

Шаг 3 – Создание демо-страниц

Вам нужно создать файл index.html в директории yourdomain.com/public_html:

nano yourdomain.com/public_html/index.html

Введите это содержимое в файл:

<html>
  <head>
    <title>Это тестовая страница</title>
  </head>
  <body>
    <h2>Он работает!</h2>
  </body>
</html>

Сохраните файл по завершению.

Шаг 4 – Создание Apache virtualhost

Создайте .conf файл нового Apache virtualhost в конфигурационной директории:

nano /etc/httpd/conf.d/yourdomain.com.conf

Структура файла yourdomain.com.conf должна быть похожа на:

<VirtualHost *:80>
    ServerName www.yourdomain.com
    ServerAlias yourdomain.com
    DocumentRoot /var/www/yourdomain.com/public_html
    ErrorLog /var/www/yourdomain.com/error.log
    CustomLog /var/www/yourdomain.com/requests.log combined
</VirtualHost>

В общем, мы сообщаем Apache, что мы будем использовать порт 80 для взаимодействия и что yourdomain.com — это имя виртуального хоста. Кроме этого, мы определяем директории для файлов веб-сайта (корневой каталог документов) и журналы ошибок (error logs).

Чтобы эти изменения вступили в силу, перезапустите Apache, используя эту команду:

systemctl restart httpd.service

Это всё, вы только что создали виртуальный хост Apache virtualhost для вашего домена, попробуйте открыть его в своём браузере. Вы должны увидеть страницу “Он работает!”.

Заключение

Теперь вы знаете как создавать Apache virtualhost на CentOS7-машине. И теперь каждый хост может обслуживать разный контент. Более того, вы знакомы с конфигурацией файла Apache virtualhost.

Работаем с виртуальными хостами. Зачем нужны виртуальные хосты

Так как большинство читателей работают с операционной системой Windows, то сначала организуем виртуальные хосты в Windows 7.

Виртуальные хосты в Windows 7

В качестве примера поместим один или несколько проектов на диск D: локального компьютера. Сначала организуем структуру каталогов. На диске D: создаем каталог «mysites», а в нём каталог для первого сайта «site1». В каталоге «site1» сделаем два подкаталога: «www» и «logs». В первом подкаталоге будет располагаться сам сайт, а во втором, журналы виртуального хоста: access.log (журнал доступа) и error.log (журнал ошибок).

Файлы журналов создавать не надо, они будут созданы автоматически. А в каталоге «www», пока нет сайта, поместим простейший файл-заглушку «index.html» следующего содержания:

Теперь немного поправим настройки для виртуальных хостов веб-сервера Apache. Открываем C:\xampp\apache\conf\extra\ httpd-vhosts.conf
Как видим, этот файл уже содержит два примера виртуальных хостов. Не будем их трогать, а ниже разместим следующие строки:

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "D:/mysites/site1/www"
    ServerName site1
    ServerAlias www.site1
    ErrorLog "D:/mysites/site1/logs/error.log"
    CustomLog "D:/mysites/site1/logs/access.log" common
   <Directory "D:/mysites/site1/www">
	AllowOverride All
	Require all granted
    </Directory>
</VirtualHost>

 Первая директива NameVirtualHost *:80 включает поименное использование виртуальных хостов на 80-ом порту (обычный http, если нужен https, используем 443 порт).
Следующие четыре строки это общая секция для всех виртуальных хостов. Если клиент обращается к серверу по IP-адресу или по несуществующему имени он попадет на этот виртуальный хост. В нашем случае в корневую директорию веб-сервера. Остальные строки это описание нашего первого виртуального хоста. Если нужно добавить ещё один виртуальный хост, то просто копируем эту секцию, вставляем ниже и по аналогии изменяем данные. Сохраняем файл.
Значение данных в секции виртуального хоста:

  • <VirtualHost *:80> Какой порт используется
  • ServerAdmin [email protected] Эл. почта администратора сайта
  • DocumentRoot «D:/mysites/site1/www» Корневой каталог сайта
  • ServerName site1 Имя хоста
  • ServerAlias www.site1 Псевдоним хоста. Можно обращаться, используя псевдоним
  • ErrorLog «D:/mysites/site1/logs/error.log» Расположение журнала ошибок
  • CustomLog «D:/mysites/site1/logs/access.log» common Расположение журнала доступа. Оператор common определяет общую степень детализации журнала. Если нужна более подробная детализация, то вместо common пишем combined
  • <Directory «D:/mysites/site1/www»> Подсекция, в которой определяются права и настройки для конкретного каталога.
  • AllowOverride All Эта директива нужна для правильной работы системы SEF

Из панели управления XAMPP перестартовываем Apache. Изменяем файл C:\Windows\System32\drivers\etc\hosts. Дописываем в него две строки:

127.0.0.1     site1
127.0.0.1     www.site1

Вместо 127.0.0.1 можно написать 127.0.0.2, а для следующего виртуального хоста 127.0.0.3, но в этом нет особой нужды. Об этом напишу в другой раз. А сейчас сохраняем файл. Открываем браузер и адресной строке вводим http://site1 или просто site1. Если всё сделано правильно, видим информацию из файла-заглушки.

Виртуальные хосты в Debian GNU/Linux

Настройка виртуальных хостов в Linux мало чем отличается от их настройки в Windows. Разве что созданием структуры каталогов. Оно и понятно, Apache кроссплатформенное решение, настроечные файлы практически одинаковы.
При установке XAMPP, корневой директорией веб-сервера Apache является каталог /opt/lampp/htdocs. А вот когда Apache устанавливается в Linux отдельным пакетом, то по умолчанию корневой директорией является каталог /var/www. Вот в этот каталог мы и поместим виртуальные хосты.
В качестве примера, создадим каталог /var/www/site1, который будет содержать два подкаталога: logs для журналов и www для файлов сайта.

Делаем владельцем каталога site1 пользователя www-data:

sudo chown -R www-data:www-data /var/www/site1

В каталог /var/www/site1/www помещаем файл-заглушку index.html

 

 Открываем файл /opt/lampp/etc/extra/httpd-vhosts.conf и удаляем всё его содержимое. Добавляем следующий код:

 

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "/opt/lampp/htdocs/"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/site1/www"
    ServerName site1
    ServerAlias www.site1
    ErrorLog "/var/www/site1/logs/error.log"
    CustomLog "/var/www/site1/logs/access.log" common
    <Directory "/var/www/site1/www">
	Options Indexes FollowSymLinks Includes ExecCGI
	AddType text/shtml .shtml
	AddOutputFilter INCLUDES .shtml
	AllowOverride All
	Require all granted
    </Directory>
</VirtualHost>

 Последние 15 строк кода – это как раз описание виртуального хоста site1. Если в дальнейшем надо будет добавить ещё один виртуальный хост, то просто скопируйте эти строки и измените пути к директориям.
Открываем файл /opt/lamp/etc/httpd.conf и раскомментируем (т. е. удалим символ решетки) строку 488:

Include etc/extra/httpd-vhosts.conf 

Перестартовываем XAMPP

/opt/lampp/xampp restart

Правим файл /etc/hosts. Ниже строки

127.0.0.1	localhost

Вставляем строку следующие строки:

127.0.0.1	site1
127.0.0.1     www.site1

В адресной строке браузера набираем
http://site1 или просто site1

Если вы видите страницу-заглушку, значит, всё сделали правильно!

Об авторе:

Меня зовут Андрей Золкин. Из более, чем пятнадцати лет работы в сфере информационных технологий, десять лет работаю с системами, базирующимися на открытом исходном коде. На страницах сайта Aitishnik.Ru веду блоги по CMC Joomla и Debian GNU/Linux.

 

Ещё о сайтостроении


    • Зачем вебмастеру VPN?

      Повсеместная доступность Интернета привела к тому, что пользоваться им стало небезопасно. Мошенники превратили сеть в стабильный источник дохода. Они взламывают сайты, блоги, электронную почту, кошельки и все, что под руку попадет….


    • Что лучше хостинг или VPS

      Сказать, то VPS лучше виртуального хостинга (или наоборот) некорректно, поскольку они предназначены для разных аудиторий.ВПС актуален в том случае, когда виртуальный хостинг не в силах поддерживать web-проект, или же пользователю нужно…


    • Сайт. С чего начать?

      Эта статья написана для тех, кому нужен интернет-сайт, но не представляющих с чего начать. Это краткое введение в мир web-сайтов, призванное помочь новичку сориентироваться в этом мире и принять правильные решения. Информация может быть…


    • Конструктор — как инструмент создания сайта…

      Вопрос о бесплатном создании собственного интернет – проекта до сих пор волнует многих пользователей. Все дело в том, что люди не всегда могут сразу определиться, для чего им необходим собственный интернет – проект, и как с ним нужно…


    • Преимущества прокси-сервера

      Использование прокси-сервера не только дает анонимность вашему ИП-адресу, но также позволяет ограничивать доступ к разным ресурсам Интернета сотрудников компании. Прокси-сервер — это машина, которая функционируют в качестве посредника,…


    • Бесплатный сайт с помощью конструктора – преимущества и недостатк…

      Развитие и совершенствование компьютерных технологий, не перестает удивлять современного человека. К примеру, не так давно позволить себе иметь собственный сайт мог только состоятельный человек, так как это, как вы понимаете,…

Поддержка виртуального хоста на основе имен

— HTTP-сервер Apache, версия 2.4

В этом документе описывается, когда и как использовать виртуальные хосты на основе имен.

См. Также

виртуальных хостов на основе IP используют IP-адрес подключения к
определить правильный виртуальный хост для обслуживания. Поэтому вам нужно
иметь отдельный IP-адрес для каждого хоста.

При виртуальном хостинге на основе имен сервер полагается на клиента для
сообщить имя хоста как часть заголовков HTTP.Используя эту технику,
много разных хостов могут использовать один и тот же IP-адрес.

Виртуальный хостинг на основе имен обычно проще, так как вам нужно
настройте только свой DNS-сервер для сопоставления каждого имени хоста с правильным
IP-адрес, а затем настройте HTTP-сервер Apache для распознавания
разные имена хостов. Виртуальный хостинг на основе имен также упрощает
потребность в дефицитных IP-адресах. Поэтому вы должны использовать
виртуальный хостинг на основе имени, если вы не используете оборудование
это явно требует хостинга на основе IP.Исторические причины
Виртуальный хостинг на базе IP, основанный на поддержке клиентов, больше не
применимо к универсальному веб-серверу.

Виртуальный хостинг на основе имени строится на основе виртуального хоста на основе IP.
алгоритм выбора, то есть поиск правильного имени сервера
происходят только между виртуальными хостами, которые имеют лучший IP-адрес.

Важно понимать, что первый шаг в виртуальном
разрешение хоста — это разрешение на основе IP.Виртуальный хост на основе имени
разрешение выбирает только наиболее подходящий виртуальный хост на основе имени
после сужения списка кандидатов до лучшего соответствия на основе IP. Использование подстановочного знака (*)
для IP-адреса во всех директивах VirtualHost делает это
Отображение на основе IP не имеет значения.

Когда поступает запрос, сервер находит наилучшее (наиболее точное) соответствие
аргумент на основе
IP-адрес и порт, используемые запросом. Если есть более одного виртуального хоста
содержащий эту комбинацию наиболее подходящего адреса и порта, Apache будет в дальнейшем
сравните директивы ServerName и ServerAlias ​​ с именем сервера
присутствует в запросе.

Если вы опустите ServerName
директивы с любого виртуального хоста на основе имени, сервер будет по умолчанию
на полное доменное имя (FQDN), производное от имени хоста системы.
Это неявно установленное имя сервера может привести к нелогичному виртуальному хосту.
соответствие и не рекомендуется.

Vhost на основе имени по умолчанию для комбинации IP и порта

Если совпадение ServerName или ServerAlias ​​не найдено в наборе
виртуальные хосты, содержащие наиболее точный соответствующий IP-адрес и порт
комбинация, затем первый указанный виртуальный хост , который
совпадения, которые будут использоваться.

Первым шагом является создание блока для
каждый отдельный хост, который вы хотели бы обслуживать. Внутри каждого блока вам понадобится как минимум
ServerName директива для обозначения
какой хост обслуживается и DocumentRoot
директива, чтобы показать, где в файловой системе содержимое для этого хоста
жизни.

Главный хост ушел

Любой запрос, который не соответствует существующему , обрабатывается глобальным
конфигурация сервера, независимо от имени хоста или ServerName.

Когда вы добавляете виртуальный хост на основе имени к существующему серверу, и
аргументы виртуального хоста соответствуют уже существующим комбинациям IP и портов,
запросы теперь будут обрабатываться явным виртуальным хостом. В этом случае,
обычно разумно создать виртуальный хост по умолчанию
с ServerName , совпадающим с
базовый сервер. Новые домены на том же интерфейсе и порте, но
требующие отдельных конфигураций, затем могут быть добавлены как последующие (не по умолчанию)
виртуальные хосты.

Наследование ServerName

Лучше всегда явно указывать ServerName на каждом виртуальном хосте на основе имени.

Если виртуальный хост не указывает
ServerName , имя сервера будет
унаследован от базовой конфигурации сервера. Если имя сервера не было
указан глобально, он обнаруживается при запуске через обратное разрешение DNS
первого адреса прослушивания. В любом случае это унаследованное имя сервера
повлияет на разрешение виртуального хоста на основе имени, поэтому лучше всегда
явно указать ServerName в каждом
виртуальный хост на основе имени.

Например, предположим, что вы обслуживаете домен
www.example.com и вы хотите добавить виртуальный хост
other.example.com , который указывает на тот же IP-адрес.
Затем вы просто добавляете следующее в httpd.conf :

 
    # Этот первый в списке виртуальный хост также используется по умолчанию для *: 80
    ServerName www.example.com
    ServerAlias ​​example.com
    DocumentRoot "/ www / домен"



    ServerName другое.example.com
    DocumentRoot "/ www / otherdomain"
 

Вы также можете указать явный IP-адрес вместо
* в директивах . Например, вы можете захотеть сделать это
для запуска некоторых виртуальных хостов на основе имен на одном IP-адресе, и либо
На основе IP или другого набора виртуальных хостов на основе имен на другом адресе.

Многие серверы хотят быть доступными под несколькими именами. Это
возможно с ServerAlias ​​
директива, размещенная внутри раздела .Например, в первом блоке выше,
Директива ServerAlias ​​ указывает, что
перечисленные имена — это другие имена, которые люди могут использовать, чтобы увидеть то же самое
сайт:

 ServerAlias ​​example.com * .example.com 

, то запросы для всех хостов в домене example.com будут
обслуживаться виртуальным хостом www.example.com . Подстановочный знак
символы * и ? можно использовать для сопоставления имен.Конечно, вы не можете просто придумать имена и поместить их в ServerName или ServerAlias ​​. Вы должны
сначала настройте DNS-сервер для сопоставления этих имен с IP-адресом.
адрес, связанный с вашим сервером.

Обрабатываются виртуальные хосты на основе имен для наиболее подходящего набора из s
в том порядке, в котором они появляются в конфигурации. Используется первое совпадающее имя ServerName или ServerAlias ​​ без разного приоритета для подстановочных знаков.
(ни для ServerName vs.ServerAlias).

Полный список имен в VirtualHost
директивы обрабатываются так же, как (без подстановочных знаков)
ServerAlias ​​.

Наконец, вы можете настроить конфигурацию виртуальных хостов.
поместив другие директивы в контейнеры . Большинство директив можно
помещены в эти контейнеры и затем изменят конфигурацию только
соответствующий виртуальный хост. Чтобы узнать, разрешена ли конкретная директива,
проверьте контекст
директива.Директивы конфигурации, установленные в контексте главного сервера
(вне любого
контейнер) будут использоваться только в том случае, если они не переопределены виртуальным хостом
настройки.

Поддержка виртуального хоста на основе имен

— HTTP-сервер Apache версии 2.2

Обратите внимание:

Этот документ относится к версии Apache httpd 2.2 , которая больше не поддерживается. Здесь задокументирован активный выпуск. Если вы еще не обновились, перейдите по этой ссылке для получения дополнительной информации.

Вы можете перейти по этой ссылке, чтобы перейти к текущей версии этого документа.

В этом документе описывается, когда и как использовать виртуальные хосты на основе имен.

виртуальных хостов на основе IP используют IP-адрес подключения к
определить правильный виртуальный хост для обслуживания. Поэтому вам нужно
иметь отдельный IP-адрес для каждого хоста. С виртуальным именем на основе
хостинг, сервер полагается на клиента, чтобы сообщить имя хоста как
часть заголовков HTTP.Используя эту технику, многие разные хосты
могут использовать один и тот же IP-адрес.

Виртуальный хостинг на основе имен обычно проще, так как вам нужно
настройте только свой DNS-сервер для сопоставления каждого имени хоста с правильным
IP-адрес, а затем настройте HTTP-сервер Apache для распознавания
разные имена хостов. Виртуальный хостинг на основе имен также упрощает
потребность в дефицитных IP-адресах. Поэтому вы должны использовать
виртуальный хостинг на основе имени, если вы не используете оборудование
это явно требует хостинга на основе IP.Исторические причины
Виртуальный хостинг на базе IP, основанный на поддержке клиентов, больше не
применимо к универсальному веб-серверу, если вы не
с использованием версии mod_ssl без поддержки SNI
(стандарт в выпусках Apache с 2.2.12).

Для использования виртуального хостинга на основе имени необходимо указать IP-адрес.
адрес (и, возможно, порт) на сервере, который будет принимать
запросы к хозяевам. Это настраивается с помощью директивы NameVirtualHost .В обычном случае, когда все IP-адреса на сервере должны
можно использовать * в качестве аргумента для NameVirtualHost . Если вы планируете использовать
несколько портов (например, с использованием SSL), вы должны добавить порт в аргумент,
например *: 80 . Обратите внимание, что упоминание IP-адреса в
NameVirtualHost директива не
автоматически заставляет сервер прослушивать этот IP-адрес. Видеть
Настройка того, какие адреса и порты использует Apache
Больше подробностей.Кроме того, любой указанный здесь IP-адрес должен быть
связанный с сетевым интерфейсом на сервере.

Следующим шагом будет создание блока для
каждый отдельный хост, который вы хотели бы обслуживать. Аргумент против
директива
должен соответствовать определенной директиве NameVirtualHost . (В этом обычном случае
это будет «*: 80»). Внутри каждого блока вам понадобится как минимум
ServerName директива для обозначения
какой хост обслуживается и DocumentRoot
директива, чтобы показать, где в файловой системе содержимое для этого хоста
жизни.

Главный хост ушел

Если вы добавляете виртуальные хосты к существующему веб-серверу, вы
также должен создать блок для существующего хоста. ServerName и DocumentRoot , включенные в этот виртуальный хост, должны быть
то же, что и глобальное ServerName и
Корень документа . Перечислить этот виртуальный
host сначала в файле конфигурации, чтобы он работал по умолчанию
хозяин.

Например, предположим, что вы обслуживаете домен
www.domain.tld и вы хотите добавить виртуальный хост
www.otherdomain.tld , который указывает на тот же IP-адрес.
Затем вы просто добавляете следующее в httpd.conf :


NameVirtualHost *: 80


Имя сервера www.domain.tld
ServerAlias ​​domain.tld * .domain.tld
DocumentRoot / www / domain


ServerName www.otherdomain.tld
DocumentRoot / www / otherdomain

Вы также можете указать явный IP-адрес вместо
* в директивах NameVirtualHost и . Например, вы можете захотеть сделать это
для запуска некоторых виртуальных хостов на основе имен на одном IP-адресе, и либо
На основе IP или другого набора виртуальных хостов на основе имен на другом адресе.

Многие серверы хотят быть доступными под несколькими именами.Это
возможно с ServerAlias ​​
директива, размещенная внутри раздела . Например, в первом блоке выше,
Директива ServerAlias ​​ указывает, что
перечисленные имена — это другие имена, которые люди могут использовать, чтобы увидеть то же самое
сайт:


ServerAlias ​​domain.tld * .domain.tld

Затем

запрашивает все хосты в домене .tld будет
обслуживаться виртуальным хостом www.domain.tld . Подстановочный знак
символы * и ? можно использовать для сопоставления имен.
Конечно, вы не можете просто придумать имена и поместить их в ServerName или ServerAlias ​​. Вы должны
сначала настройте DNS-сервер для сопоставления этих имен с IP-адресом.
адрес, связанный с вашим сервером.

Полный список имен в директиве VirtualHost обрабатывается так же, как (без подстановочных знаков)
ServerAlias ​​.

Наконец, вы можете настроить конфигурацию виртуальных хостов.
поместив другие директивы в контейнеры . Большинство директив можно
помещены в эти контейнеры и затем изменят конфигурацию только
соответствующий виртуальный хост. Чтобы узнать, разрешена ли конкретная директива,
проверьте контекст
директива. Директивы конфигурации, установленные в контексте главного сервера
(вне любого
контейнер) будут использоваться только в том случае, если они не переопределены виртуальным хостом
настройки.

Теперь, когда приходит запрос, сервер сначала проверяет, использует ли он
IP-адрес, соответствующий NameVirtualHost . Если это так, он будет просматривать каждый раздел с соответствующими
IP-адрес и попробуйте найти тот, где ServerName или ServerAlias ​​ соответствует запрошенному
имя хоста. Если он его находит, он использует конфигурацию для этого сервера.
Если соответствующий виртуальный хост не найден, будет первым виртуальным хостом в списке.
будет использоваться хост
, соответствующий IP-адресу.

Как следствие, первый виртуальный хост в списке — это по умолчанию
виртуальный хост. DocumentRoot от
главный сервер не будет никогда , когда IP
адрес соответствует NameVirtualHost
директива. Если вы хотите иметь специальную конфигурацию для запросов
которые не соответствуют какому-либо конкретному виртуальному хосту, просто укажите эту конфигурацию
в
контейнер и сначала укажите его в файле конфигурации.

Как упоминалось ранее, есть несколько клиентов
которые не отправляют необходимые данные для виртуального имени
хосты работают нормально. Этим клиентам всегда будут отправляться
страницы с первого виртуального хоста, указанного для этого IP-адреса
( основной виртуальный хост на основе имени).

На сколько старше?

Обратите внимание, что когда мы говорим «старше», мы действительно имеем в виду «старше». Ты
очень маловероятно, что вы встретите один из этих браузеров, используемых сегодня.Все
текущие версии любого браузера отправляют заголовок Host как
требуется для виртуальных хостов на основе имен.

Возможный обходной путь с ServerPath
директива, хотя и немного громоздкая:

Пример конфигурации:


ИмяVirtualHost 111.22.33.44


ServerName www.domain.tld
ServerPath / domain
DocumentRoot / web / domain

Что это значит? Это означает, что запрос любого URI
начиная с « / домен » будут обслуживаться с
виртуальный хост www.domain.tld . Это означает, что
страницы доступны как http: //www.domain.tld/domain/
для всех клиентов, хотя клиенты отправляют заголовок Host:
также можно получить доступ к нему как http: //www.domain.tld/ .

Чтобы эта работа работала, поместите ссылку на свой основной
страницу виртуального хоста на
http: //www.domain.tld/domain/ . Затем в виртуальном
страницы хоста, обязательно используйте либо чисто относительные ссылки
( например,, « file.html » или
« ../icons/image.gif «) или ссылки, содержащие
перед / домен / ( например, ,
« http: //www.domain.tld/domain/misc/file.html » или
« /domain/misc/file.html «).

Это требует некоторой дисциплины, но соблюдение этих правил
рекомендации по большей части гарантируют, что ваши страницы будут
работать со всеми браузерами, новыми и старыми.

Поддержка виртуального хоста на базе IP на базе Apache

См. Также

Виртуальный хостинг на базе IP — это метод применения различных директив
на основе IP-адреса и порта, на котором был получен запрос.Наиболее часто,
это используется для обслуживания разных веб-сайтов на разных портах или интерфейсах.

Во многих случаях на основе имени
виртуальные хосты удобнее, потому что позволяют
много виртуальных хостов для совместного использования одного адреса / порта.
См. Раздел «На основе имени» и «На основе IP»
Виртуальные хосты, которые помогут вам принять решение.

Как указывает термин на основе IP-адреса , сервер
должен иметь различную комбинацию IP-адреса / порта для каждого IP-адреса.
виртуальный хост
. Этого можно добиться с помощью машины
наличие нескольких физических сетевых подключений или использование
виртуальные интерфейсы, которые поддерживаются большинством современных операционных
системы (подробности см. в документации по системе, это
часто называется «ip aliases», а команда «ifconfig»
чаще всего используется для их настройки) и / или с использованием нескольких
номера портов.

В терминологии HTTP-сервера Apache, использование одного IP-адреса
но несколько портов TCP, это также виртуальный хостинг на основе IP.

Существует два способа настройки apache для поддержки нескольких
хосты. Либо запустив отдельный демон httpd для
каждое имя хоста, или запустив один демон, который поддерживает все
виртуальные хосты.

Использовать несколько демонов, когда:

  • Имеются проблемы с безопасным разделением, например company1
    не хочет, чтобы кто-либо в компании company2 мог читать их
    данные, кроме как через Интернет.В этом случае вам понадобится два
    демоны, каждый из которых работает с разными настройками User , Group , Listen и ServerRoot .
  • Вы можете позволить себе память и файловый дескриптор
    требования прослушивания каждого псевдонима IP на
    машина. Можно только Слушать «подстановочный знак»
    адрес или по конкретным адресам. Итак, если вам нужно
    прослушать конкретный адрес по какой-либо причине, тогда вы
    нужно будет прослушать все конкретные адреса.(Хотя один
    httpd может прослушивать N-1 адресов, а другой может
    прослушайте оставшийся адрес.)

Использовать одного демона, когда:

  • Совместное использование конфигурации httpd между виртуальными хостами
    приемлемо.
  • Машина обслуживает большое количество запросов, поэтому
    потеря производительности при запуске отдельных демонов может быть
    существенный.

Создайте отдельную установку httpd для каждого
виртуальный хост.Для каждой установки используйте директиву Listen в
файл конфигурации для выбора IP-адреса (или виртуального хоста)
этот демон обслуживает. например

 Слушайте 192.0.2.100:80 

Рекомендуется использовать IP-адрес вместо
имя хоста (см. предупреждения DNS).

В этом случае один httpd будет обслуживать
запросы к главному серверу и всем виртуальным хостам. Директива VirtualHost
в файле конфигурации используется для установки значений ServerAdmin , ServerName , DocumentRoot , ErrorLog и TransferLog
или CustomLog
директивы конфигурации на разные значения для каждого виртуального
хозяин.например

 
    ServerAdmin [email protected]
    DocumentRoot "/ www / vhosts / www1"
    Имя сервера www1.example.com
    ErrorLog "/ www / logs / www1 / error_log"
    CustomLog "/ www / logs / www1 / access_log" вместе



    ServerAdmin [email protected]
    DocumentRoot "/ www / vhosts / www2"
    Имя сервера www2.example.org
    ErrorLog "/ www / logs / www2 / error_log"
    CustomLog "/ www / logs / www2 / access_log" вместе
 

Рекомендуется использовать IP-адрес вместо
имя хоста в директиве
(см. предупреждения DNS).

Определенные IP-адреса или порты имеют приоритет над подстановочными знаками.
эквиваленты, и любой соответствующий виртуальный хост имеет приоритет над
базовая конфигурация серверов.

Почти любая директива конфигурации может быть
добавьте директиву VirtualHost, за исключением
директивы, управляющие созданием процесса, и некоторые другие
директивы. Чтобы узнать, можно ли использовать директиву в
Директива VirtualHost, проверьте контекст, используя
директива index.

SuexecUserGroup
может использоваться внутри
Директива VirtualHost, если suEXEC
обертка используется.

БЕЗОПАСНОСТЬ: При указании места для записи файлов журнала,
помните о некоторых рисках безопасности, которые присутствуют, если кто-либо
кроме пользователя, запускающего Apache, есть доступ на запись к
каталог, где они написаны. См. Документ с советами по безопасности
для подробностей.

Примеры

VirtualHost — HTTP-сервер Apache версии 2.5

Этот документ пытается ответить на часто задаваемые вопросы о
настройка виртуальных хостов. Эти сценарии включают несколько
веб-сайты, работающие на одном сервере через виртуальные хосты на основе имен или IP.

Контекстное примечание

Виртуальные хосты должны быть указаны в
глобальный охват. Сторонние дистрибутивы сервера могут использовать
альтернативный файл начальной конфигурации или несколько файлов конфигурации
которые все принимают директивы с глобальной областью действия.Эти дистрибутивы могут
также предложить соглашение об указании виртуальных хостов в их собственном индивидуальном
файлы, включенные в глобальную конфигурацию через
Включить директиву . Более подробная информация
может быть предоставлен в стороннем README, например
/usr/share/doc/apache2/README.Debian.gz на базе Debian и Ubuntu
раздачи.

Ваш сервер имеет несколько имен хостов, которые разрешаются в один адрес,
и вы хотите по-другому ответить для www.example.com
и www.example.org .

Note

Создание виртуального
конфигурации хоста на вашем сервере Apache не волшебным образом
вызвать создание записей DNS для этих имен хостов. Ты
должен иметь имена в DNS, разрешающие ваш IP
адрес, иначе никто не сможет увидеть ваш веб-сайт. Ты
можно помещать записи в файл хостов для локальных
тестирование, но это будет работать только на машине с теми
содержит записей.

 # Убедитесь, что Apache прослушивает порт 80
Слушай 80

    DocumentRoot "/ www / example1"
    ServerName www.example.com

    # Другие директивы здесь



    DocumentRoot "/ www / example2"
    ServerName www.example.org

    # Другие директивы здесь
 

Звездочки соответствуют всем адресам, поэтому главный сервер не обслуживает
Запросы. В связи с тем, что виртуальный хост с
ServerName www.example.com — первый
в файле конфигурации он имеет наивысший приоритет и его можно увидеть
как по умолчанию или основной сервер . Это означает
что если получен запрос, который не соответствует ни одному из указанных
ServerName , он будет обслуживаться этим первым
<виртуальный хост> .

Вышеуказанная конфигурация — это то, что вы захотите использовать почти в
все ситуации виртуального хостинга на основе имен. Единственное, что это
конфигурация не будет работать, когда вы обслуживаете
различный контент на основе разных IP-адресов или портов.

Примечание

Вы можете заменить * определенным IP-адресом.
в системе. Такие виртуальные хосты будут использоваться только для
HTTP-запросы, полученные при подключении к указанному IP
адрес.

Однако дополнительно полезно использовать *
в системах, где IP-адрес непредсказуем — для
например, если у вас есть динамический IP-адрес у вашего интернет-провайдера, и
вы используете несколько разновидностей динамического DNS-решения.С
* соответствует любому IP-адресу, эта конфигурация
будет работать без изменений всякий раз, когда ваш IP-адрес
изменения.

Примечание

Любой из обсуждаемых здесь методов может быть распространен на любой
количество IP-адресов.

У сервера два IP-адреса. На одном ( 172.20.30.40 ) мы
будет обслуживать «главный» сервер, server.example.com и на
другие ( 172.20.30.50 ) мы будем обслуживать два и более виртуальных хоста.

 Слушайте 80

# Это «основной» сервер, работающий на 172.20.30.40
Имя сервера server.example.com
DocumentRoot "/ www / mainserver"


    DocumentRoot "/ www / example1"
    ServerName www.example.com

    # Другие директивы здесь ...



    DocumentRoot "/ www / example2"
    ServerName www.example.org

    # Остальные директивы здесь ...
 

Любой запрос на адрес, отличный от 172.20.30.50 будет
обслуживается с главного сервера. Запрос на номер 172.20.30.50 с
неизвестное имя хоста или отсутствие заголовка Host: будет обслуживаться из
www.example.com .

Серверная машина имеет два IP-адреса ( 192.168.1.1
и 172.20.30.40 ). Машина находится между
внутренняя (интранет) сеть и внешняя (интернет) сеть. Снаружи
сети имя server.example.com разрешает
внешний адрес ( 172.20.30.40 ), но внутри
сеть, то же имя преобразуется во внутренний адрес
( 192.168.1.1 ).

Сервер может отвечать на внутренние и внешние запросы
с тем же содержанием, всего с одним разделом .

 
    DocumentRoot "/ www / server1"
    Имя сервера server.example.com
    ServerAlias ​​сервер
 

Теперь запросы из обеих сетей будут обслуживаться из одной
<виртуальный хост> .

Примечание:

На внутреннем
сети, можно просто использовать имя server скорее
чем полное имя хоста
server.example.com .

Обратите внимание, что в приведенном выше примере вы можете заменить список
IP-адресов с * , что приведет к
отвечают одинаково на все адреса.

У вас есть несколько доменов с одним и тем же IP-адресом, и вы также хотите
обслуживают несколько портов.В приведенном ниже примере показано, что сопоставление имен
происходит после наиболее подходящего сочетания IP-адреса и порта
определен.

 Слушайте 80
Слушай 8080


    ServerName www.example.com
    DocumentRoot "/ www / domain-80"



    ServerName www.example.com
    DocumentRoot "/ www / domain-8080"



    ServerName www.example.org
    DocumentRoot "/ www / otherdomain-80"



    ServerName www.example.org
    DocumentRoot "/ www / otherdomain-8080"
 

Сервер имеет два IP-адреса ( 172.20.30.40 и
172.20.30.50 ), которые разрешаются к именам
www.example.com и www.example.org
соответственно.

 Слушайте 80


    DocumentRoot "/ www / example1"
    Имя сервера www.example.com



    DocumentRoot "/ www / example2"
    ServerName www.example.org
 

Запросы на любой адрес, не указанный в одном из
директив (например,
localhost , например) перейдет на главный сервер, если
существует один.

Серверная машина имеет два IP-адреса ( 172.20.30.40 и
172.20.30.50 ), которые разрешаются к именам
www.example.com и www.example.org
соответственно. В каждом случае мы хотим запускать хосты на портах 80 и
8080.

 Слушайте 172.20.30.40:80
Слушайте 172.20.30.40:8080
Слушай 172.20.30.50:80
Слушайте 172.20.30.50:8080


    DocumentRoot "/ www / example1-80"
    ServerName www.example.com



    DocumentRoot "/ www / example1-8080"
    ServerName www.example.com



    DocumentRoot "/ www / example2-80"
    ServerName www.example.org



    DocumentRoot "/ www / example2-8080"
    ServerName www.example.org
 

Любой адрес, указанный в аргументе виртуального хоста, который никогда не
появляется в другом виртуальном хосте, это виртуальный хост, основанный исключительно на IP.

 Слушайте 80

    DocumentRoot "/ www / example1"
    Имя сервера www.example.com



    DocumentRoot "/ www / example2"
    ServerName www.example.org



    DocumentRoot "/ www / example3"
    ServerName www.example.net


# На основе IP

    DocumentRoot "/ www / example4"
    ServerName www.example.edu



    DocumentRoot "/ www / example5"
    ServerName www.example.gov
 

В следующем примере интерфейсная машина может проксировать
виртуальный хост через сервер, работающий на другой машине.в
пример, виртуальный хост с таким же именем настроен на машине
по телефону 192.168.111.2 . ProxyPreserveHost
На
используется директива, чтобы желаемое имя хоста было
пройдено, в случае, если мы проксируем несколько имен хостов на
одиночная машина.

 
    ProxyPreserveHost Вкл.
    ProxyPass "/" "http://192.168.111.2/"
    ProxyPassReverse "/" "http://192.168.111.2/"
    ServerName hostname.example.com
 

_default_ vhosts
для всех портов

Улавливание каждого запроса на любой неуказанный IP-адрес и
порт, и.е. , комбинация адрес / порт, которая не используется для
любой другой виртуальный хост.

 
    DocumentRoot "/ www / default"
 

Использование такого виртуального хоста по умолчанию с портом с подстановочными знаками эффективно предотвращает
любой запрос, идущий на главный сервер.

Vhost по умолчанию никогда не обслуживает запрос, который был отправлен
адрес / порт, который используется для виртуальных хостов на основе имен. Если запрос
содержит неизвестный или отсутствует заголовок Host: , он всегда
обслуживается с основного виртуального хоста на основе имени (виртуальный хост для этого
адрес / порт, указанные первым в файле конфигурации).

Вы можете использовать AliasMatch или
RewriteRule для перезаписи любого
запрос на единую информационную страницу (или скрипт).

_default_ vhosts
для разных портов

То же, что и установка 1, но сервер прослушивает несколько портов, и мы хотим
использовать второй vhost _default_ для порта 80.

 
    DocumentRoot "/ www / default80"
    # ...



    DocumentRoot "/ www / default"
    #...
 

Vhost по умолчанию для порта 80 (который должен появляться перед любым
vhost по умолчанию с подстановочным портом) ловит все отправленные запросы
на неуказанный IP-адрес. Главный сервер никогда не используется для обслуживания
запрос.

_default_ vhosts
для одного порта

Мы хотим иметь виртуальный хост по умолчанию для порта 80, но не использовать другое значение по умолчанию.
vhosts.

 
    DocumentRoot "/ www / default"
...
 

Запрос на неуказанный адрес на порту 80 обслуживается из
по умолчанию vhost. Любой другой запрос на неуказанный адрес и порт
обслуживается с главного сервера.

Любое использование * в объявлении виртуального хоста будет иметь
более высокий приоритет, чем _default_ .

Vhost на основе имени с именем хоста
www.example.org (из нашего примера на основе имени, установка 2) должен получить собственный IP-адрес.
адрес.Чтобы избежать проблем с серверами имен или прокси, которые кэшировали
старый IP-адрес для виртуального хоста на основе имени, который мы хотим предоставить как
варианты на этапе миграции.

Решение простое, потому что мы можем просто добавить новый IP-адрес.
( 172.20.30.50 ) на VirtualHost
директива.

 Слушайте 80
ServerName www.example.com
DocumentRoot "/ www / example1"


    DocumentRoot "/ www / example2"
    Имя сервера www.example.org
    # ...



    DocumentRoot "/ www / example3"
    ServerName www.example.net
    ServerAlias ​​* .example.net
    # ...
 

Теперь к виртуальному хосту можно получить доступ через новый адрес (как
Vhost на основе IP) и через старый адрес (как имя на основе
vhost).

У нас есть сервер с двумя именами vhosts. Чтобы соответствовать
правильный виртуальный хост, клиент должен отправить правильный Host:
заголовок.Старые клиенты HTTP / 1.0 не отправляют такой заголовок, а Apache имеет
не знаю, к какому vhost клиент пытался добраться (и обслуживает запрос
с первичного хоста). Чтобы обеспечить такую ​​же обратную совместимость, как
возможно, мы создаем первичный виртуальный хост, который возвращает одну страницу
содержащие ссылки с префиксом URL на виртуальный
хосты.

 
    # основной vhost
    DocumentRoot "/ www / поддомен"
    RewriteEngine On
    RewriteRule "." "/ www / поддомен / index.(/sub2/.*) "" / www / subdomain $ 1 "
    # ...
 

из-за ServerPath
директива запрос к URL
http: //www.sub1.domain.tld/sub1/ — это всегда обслуживается
с sub1-vhost.
Запрос на URL
http: //www.sub1.domain.tld/ только
обслуживается с sub1-vhost, если клиент отправил правильный
Хост: заголовок. Если нет Host: заголовок отправляется
клиент получает информационную страницу с основного хоста.

Обратите внимание, что есть одна странность: запрос на
http: //www.sub2.domain.tld/sub1/ также обслуживается из
sub1-vhost, если клиент не отправил Host: заголовок.

Директивы RewriteRule
используются, чтобы убедиться, что клиент, отправивший правильный
Host: заголовок может использовать оба варианта URL: , то есть ,
с префиксом URL или без него.

Как настроить виртуальные хосты Apache в Ubuntu 16.04

Введение

Веб-сервер Apache — самый популярный способ обслуживания веб-контента в Интернете. На его долю приходится более половины всех активных веб-сайтов в Интернете, он чрезвычайно мощный и гибкий.

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

Эти обозначения позволяют администратору использовать один сервер для размещения нескольких доменов или сайтов за пределами одного интерфейса или IP с помощью механизма сопоставления.Это актуально для всех, кто хочет разместить более одного сайта на одном VPS.

Каждый настроенный домен будет направлять посетителя в определенный каталог, содержащий информацию об этом сайте, никогда не указывая, что тот же сервер также отвечает за другие сайты. Эта схема расширяется без каких-либо программных ограничений, пока ваш сервер может справиться с нагрузкой.

В этом руководстве мы расскажем, как настроить виртуальные хосты Apache на Ubuntu 16.04 VPS. В ходе этого процесса вы узнаете, как предоставлять разный контент разным посетителям в зависимости от того, какие домены они запрашивают.

Предварительные требования

Перед тем, как приступить к этому руководству, вы должны создать пользователя без полномочий root, как описано в шагах 1–4 здесь.

Для выполнения этих шагов вам также потребуется установить Apache. Если вы еще этого не сделали, вы можете установить Apache на свой сервер с помощью apt-get :

.

  
  • sudo apt-get update
  • sudo apt-get install apache2

После выполнения этих шагов мы можем приступить к работе.

Для целей этого руководства наша конфигурация сделает виртуальный хост для example.com и еще один для test.com . На них будут ссылаться в руководстве, но вы должны заменить свои собственные домены или значения, следуя инструкциям.

Чтобы узнать, как настроить свои доменные имена в DigitalOcean, перейдите по этой ссылке. Если у вас , а у есть домены, с которыми можно поиграть, вы можете использовать фиктивные значения.

Позже мы покажем, как отредактировать файл локальных хостов, чтобы проверить конфигурацию, если вы используете фиктивные значения.Это позволит вам протестировать конфигурацию с домашнего компьютера, даже если ваш контент не будет доступен другим посетителям через доменное имя.

Шаг первый — Создание структуры каталогов

Первый шаг, который мы собираемся сделать, — это создать структуру каталогов, в которой будут храниться данные сайта, которые мы будем обслуживать посетителей.

Корневой каталог нашего документа (каталог верхнего уровня, который Apache просматривает для поиска контента для обслуживания) будет настроен на отдельные каталоги в каталоге / var / www .Мы создадим здесь каталог для обоих виртуальных хостов, которые планируем создать.

В каждом из этих каталогов мы создадим папку public_html , в которой будут храниться наши фактические файлы. Это дает нам некоторую гибкость в нашем хостинге.

Например, для наших сайтов мы собираемся сделать наши каталоги так:

  
  • sudo mkdir -p /var/www/example.com/public_html
  • судо mkdir -p /var/www/test.com/public_html

Части красного цвета представляют доменные имена, которые мы хотим обслуживать с нашего VPS.

Шаг второй — предоставление разрешений

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

  
  • sudo chown -R $ USER: $ USER /var/www/example.com/public_html
  • sudo chown -R $ ПОЛЬЗОВАТЕЛЬ: $ ПОЛЬЗОВАТЕЛЬ /var/www/test.com/public_html

Переменная $ USER примет значение пользователя, в который вы в данный момент вошли, как при нажатии Введите .Таким образом, наш обычный пользователь теперь владеет подкаталогами public_html , в которых мы будем хранить наш контент.

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

  
  • sudo chmod -R 755 / var / www

Теперь ваш веб-сервер должен иметь разрешения, необходимые для обслуживания контента, и ваш пользователь должен иметь возможность создавать контент в необходимых папках.

Шаг третий — создание демонстрационных страниц для каждого виртуального хоста

У нас есть структура каталогов. Давайте создадим контент для обслуживания.

Мы просто собираемся на демонстрацию, поэтому наши страницы будут очень простыми. Мы просто собираемся создать страницу index.html для каждого сайта.

Начнем с example.com . Мы можем открыть файл index.html в нашем редакторе, набрав:

  
  • nano / var / www / example.ru / public_html / index.html

В этом файле создайте простой HTML-документ, который указывает сайт, к которому он подключен. Мой файл выглядит так:

/var/www/example.com/public_html/index.html

  
  
     Добро пожаловать на Example.com! 
  
  
    

Успех! Виртуальный хост example.com работает!

Сохраните и закройте файл, когда закончите.

Мы можем скопировать этот файл и использовать его в качестве основы для нашего второго сайта, набрав:

  
  • cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

Затем мы можем открыть файл и изменить соответствующую информацию:

  
  • нано /var/www/test.com/public_html/index.html

/var/www/test.com/public_html/index.html

  
  
     Добро пожаловать в Test.com! 
  
   

Успех! Виртуальный хост test.com работает!

Сохраните и закройте также этот файл. Теперь у вас есть страницы, необходимые для тестирования конфигурации виртуального хоста.

Шаг четвертый — создание новых файлов виртуального хоста

Файлы виртуальных хостов — это файлы, которые определяют фактическую конфигурацию наших виртуальных хостов и определяют, как веб-сервер Apache будет отвечать на различные запросы домена.

Apache поставляется с файлом виртуального хоста по умолчанию с именем 000-default.conf , который мы можем использовать в качестве отправной точки. Мы собираемся скопировать его, чтобы создать файл виртуального хоста для каждого из наших доменов.

Мы начнем с одного домена, настроим его, скопируем для нашего второго домена, а затем внесем несколько дополнительных необходимых корректировок. Конфигурация Ubuntu по умолчанию требует, чтобы каждый файл виртуального хоста заканчивался на .conf .

Создание первого файла виртуального хоста

Начнем с копирования файла для первого домена:

  
  • sudo cp / etc / apache2 / sites-available / 000-default.conf /etc/apache2/sites-available/example.com.conf

Откройте новый файл в редакторе с правами суперпользователя:

  
  • sudo nano /etc/apache2/sites-available/example.com.conf

Файл будет выглядеть примерно так (я удалил здесь комментарии, чтобы сделать файл более доступным):

/etc/apache2/sites-available/example.com.conf

  
    ServerAdmin веб-мастер @ localhost
    DocumentRoot / var / www / html
    ErrorLog $ {APACHE_LOG_DIR} / error.бревно
    CustomLog $ {APACHE_LOG_DIR} /access.log объединены

  

Как видите, здесь немного. Мы настроим элементы здесь для нашего первого домена и добавим некоторые дополнительные директивы. Этот раздел виртуального хоста соответствует любым запросам , сделанным на порту 80, порте HTTP по умолчанию.

Во-первых, нам нужно изменить директиву ServerAdmin на электронную почту, по которой администратор сайта может получать электронные письма.

  ServerAdmin admin @ пример.ком
  

После этого нам нужно добавить две директивы . Первый, называемый ServerName , устанавливает базовый домен, который должен соответствовать этому определению виртуального хоста. Скорее всего, это будет ваш домен. Второй, называемый ServerAlias ​​, определяет дополнительные имена, которые должны совпадать, как если бы они были базовым именем. Это полезно для сопоставления заданных вами хостов, например www :

  ServerName example.com
ServerAlias ​​www.example.ком
  

Единственное, что нам нужно изменить для базового файла виртуального хоста, — это расположение корня документа для этого домена. Мы уже создали нужный каталог, поэтому нам просто нужно изменить директиву DocumentRoot , чтобы отразить созданный нами каталог:

  DocumentRoot /var/www/example.com/public_html
  

В итоге наш файл виртуального хоста должен выглядеть так:

/etc/apache2/sites-available/example.com.conf

  
    ServerAdmin admin @ example.ком
    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 объединены

  

Сохраните и закройте файл.

Скопируйте первый виртуальный хост и настройте его для второго домена

Теперь, когда у нас установлен первый файл виртуального хоста, мы можем создать второй, скопировав этот файл и изменив его по мере необходимости.

Начните с копирования:

  
  • 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

Теперь вам нужно изменить всю информацию, чтобы она ссылалась на ваш второй домен. Когда вы закончите, это может выглядеть примерно так:

/etc/apache2/sites-available/test.com.conf

  
    ServerAdmin admin @ test.ком
    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 объединены

  

Сохраните и закройте файл, когда закончите.

Шаг пятый — Включите новые файлы виртуального хоста

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

Мы можем использовать инструмент a2ensite для включения каждого из наших сайтов следующим образом:

  
  • пример sudo a2ensite.com.conf
  • sudo a2ensite test.com.conf

Затем отключите сайт по умолчанию, определенный в 000-default.conf :

  
  • sudo a2dissite 000-default.conf

Когда вы закончите, вам необходимо перезапустить Apache, чтобы эти изменения вступили в силу:

  
  • sudo systemctl перезапустить apache2

В другой документации вы также можете увидеть пример с использованием команды service :

  
  • sudo service apache2 перезапуск

Эта команда по-прежнему будет работать, но она может не дать результата, который вы привыкли видеть в других системах, поскольку теперь она является оболочкой для systemd systemctl .

Шаг шестой — Настройка файла локальных хостов (необязательно)

Если вы не использовали настоящие доменные имена, принадлежащие вам, для тестирования этой процедуры, а вместо этого использовали несколько примеров доменов, вы можете по крайней мере проверить функциональность этого процесса, временно изменив файл hosts на вашем локальном компьютере.

Это перехватит любые запросы для настроенных вами доменов и направит их на ваш VPS-сервер, как это сделала бы система DNS, если бы вы использовали зарегистрированные домены.Это будет работать только с вашего компьютера и просто полезно для целей тестирования.

Убедитесь, что вы выполняете эти шаги на своем локальном компьютере, а не на VPS-сервере. Вам нужно будет знать пароль администратора компьютера или иным образом быть членом административной группы.

Если вы работаете на компьютере Mac или Linux, отредактируйте локальный файл с правами администратора, набрав:

  

Если вы работаете на компьютере с Windows, вы можете найти инструкции по изменению файла hosts здесь.

Детали, которые вам нужно добавить, — это общедоступный IP-адрес вашего VPS-сервера, за которым следует домен, который вы хотите использовать для доступа к этому VPS.

Для доменов, которые я использовал в этом руководстве, предполагая, что мой IP-адрес VPS — 111.111.111.111 , я мог бы добавить следующие строки в конец файла моих хостов:

/ etc / hosts

  127.0.0.1 локальный хост
127.0.1.1 гостевой рабочий стол
111.111.111.111 example.com
111.111.111.111 test.com
  

Это будет направлять любые запросы для примера .com и test.com на нашем компьютере и отправьте их на наш сервер по номеру 111.111.111.111 . Это то, что нам нужно, если мы на самом деле не являемся владельцами этих доменов, чтобы протестировать наши виртуальные хосты.

Сохраните и закройте файл.

Шаг седьмой — Проверьте свои результаты

Теперь, когда у вас настроены виртуальные хосты, вы можете легко протестировать настройку, перейдя к доменам, которые вы настроили в своем веб-браузере:

  http: // example.ком
  

Вы должны увидеть страницу, которая выглядит так:

Аналогично, если вы можете посетить вторую страницу:

  http://test.com
  

Вы увидите файл, который вы создали для своего второго сайта:

Если оба сайта работают нормально, значит, вы успешно настроили два виртуальных хоста на одном сервере.

Если вы изменили файл hosts на домашнем компьютере, вы можете удалить строки, которые вы добавили, теперь, когда вы убедились, что ваша конфигурация работает.Это предотвратит заполнение вашего файла hosts записями, которые на самом деле не нужны.

Если вам нужен доступ в течение длительного времени, подумайте о покупке доменного имени для каждого сайта, который вам нужен, и настройте его так, чтобы он указывал на ваш VPS-сервер.

Заключение

Если вы последовали примеру, теперь у вас должен быть один сервер, обслуживающий два отдельных доменных имени. Вы можете расширить этот процесс, выполнив описанные выше шаги, чтобы создать дополнительные виртуальные хосты.

Не существует программного ограничения на количество доменных имен, которые Apache может обрабатывать, поэтому не стесняйтесь делать столько, сколько ваш сервер способен обрабатывать.

Как настроить виртуальные хосты Apache в Ubuntu 18.04

В этом руководстве мы предоставим пошаговые инструкции о том, как настроить виртуальные хосты Apache в Ubuntu 18.04.

Виртуальные хосты Apache позволяют запускать несколько веб-сайтов на одной машине. С помощью виртуальных хостов вы можете указать корень документа сайта (каталог, содержащий файлы веб-сайта), создать отдельную политику безопасности для каждого сайта, использовать разные сертификаты SSL и многое другое.

Хотя это руководство написано для Ubuntu 18.04 Bionic Beaver те же шаги можно использовать для Ubuntu 16.04 Xenial Xerus.

Предварительные требования #

Перед продолжением этого руководства убедитесь, что вы выполнили следующие предварительные условия:

Создание структуры каталогов #

Корневой каталог документа — это каталог, в котором файлы веб-сайта для доменного имени хранятся и обслуживаются в ответ к запросам. Вы можете установить корень документа в любое место по вашему желанию, в этом руководстве мы будем использовать следующую структуру каталогов:

  / var / www /
├── domain1.ком
│ └── public_html
├── domain2.com
│ └── public_html
├── domain3.com
│ └── public_html
  

По сути, мы создадим отдельный каталог для каждого домена, который хотим разместить на нашем сервере, внутри каталога / var / www . В каждом из этих каталогов мы создадим каталог public_html , в котором будут храниться файлы веб-сайта домена.

Начните с создания корневого каталога для домена example.com :

  sudo mkdir -p / var / www / example.com / public_html  

В целях тестирования также создайте файл index.html внутри корневого каталога документов домена.

Откройте редактор и создайте демонстрационный файл:

/var/www/example.com/public_html/index.html

  

  
    
     Добро пожаловать на example.com 
  
  
    

Успех! Домашняя страница example.com!

В этом руководстве мы запускаем команды от имени пользователя sudo, а вновь созданные файлы и каталоги принадлежат пользователю root.

Чтобы избежать каких-либо проблем с разрешениями, мы можем передать владельца корневого каталога документов домена пользователю apache ( www-data ):

  sudo chown -R www-data: /var/www/example.com  

Создание виртуальных хостов #

По умолчанию в системах Ubuntu файлы конфигурации виртуальных хостов Apache хранятся в каталоге / etc / apache2 / sites-available и могут быть включены путем создания символических ссылок на / etc / apache2 / каталог с поддержкой сайтов.

Откройте нужный редактор и создайте следующий файл базовой конфигурации виртуального хоста:

/etc/apache2/sites-available/example.com.conf

  
    ServerName example.com
    ServerAlias ​​www.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/example.com/public_html

    <Каталог /var/www/example.com/public_html>
        Параметры -Indexes + FollowSymLinks
        AllowOverride All
    

    ErrorLog $ {APACHE_LOG_DIR} / пример.com-error.log
    CustomLog $ {APACHE_LOG_DIR} /example.com-access.log вместе

  
  • ServerName : домен, который должен соответствовать этой конфигурации виртуального хоста. Это должно быть ваше доменное имя.
  • ServerAlias ​​: все остальные домены, которые также должны соответствовать этому виртуальному хосту, например, субдомен www .
  • DocumentRoot : каталог, из которого Apache будет обслуживать файлы домена.
  • Параметры : Эта директива определяет, какие функции сервера доступны в определенном каталоге.
    • -Индексы : предотвращает размещение каталогов.
    • FollowSymLinks : этот параметр указывает вашему веб-серверу переходить по символическим ссылкам.
  • AllowOverride : указывает, какие директивы, объявленные в файле .htaccess , могут переопределять директивы конфигурации.
  • ErrorLog , CustomLog : указывает расположение файлов журнала.

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

Чтобы включить новый файл виртуального хоста, нам нужно создать символическую ссылку из файла виртуального хоста в каталог с поддержкой сайтов , который читается apache2 во время запуска.

Самый простой способ включить виртуальный хост - использовать помощник a2ensite :

  sudo a2ensite.ком
  

Другой вариант - вручную создать символическую ссылку, как показано ниже:

  sudo ln -s /etc/apache2/sites-available/example.com.conf / etc / apache2 / sites-enabled /  

Один раз готово, проверьте конфигурацию на наличие синтаксических ошибок с помощью:

  sudo apachectl configtest  

Если ошибок нет, вы увидите следующий вывод:

  Синтаксис ОК
  

Перезапустите службу Apache, чтобы изменения вступили в силу:

  sudo systemctl restart apache2  

Наконец, чтобы убедиться, что все работает должным образом, откройте http: // example.com в выбранном браузере, и вы увидите что-то вроде этого:

Заключение #

Вы узнали, как создать конфигурацию виртуального хоста apache для размещения нескольких доменов на одном сервере Ubuntu. Вы можете повторить описанные выше шаги и создать дополнительные виртуальные хосты для всех своих доменов.

Если вы столкнулись с какой-либо проблемой, не стесняйтесь оставлять комментарий.

Хост несколько сайтов на одном сервере с использованием Apache

Если вы размещаете более одного сайта на сервере, то, скорее всего, вы используете файлы виртуального хоста Apache, чтобы указать, какой домен должен обслуживаться.Виртуальные хосты на основе имен - это один из методов, используемых для разрешения запросов сайтов. Это означает, что когда кто-то просматривает ваш сайт, запрос отправляется на сервер, который, в свою очередь, определяет, какие файлы сайта обслуживать на основе имени домена. Используя этот метод, вы сможете разместить несколько сайтов на одном сервере с одним и тем же IP-адресом. В этом руководстве мы покажем вам, как настроить файл виртуального хоста для каждого из ваших доменов на сервере VPS Ubuntu 18.04.

Preflight

Шаг 1. Создайте каталог для каждого сайта

Вы создадите каталог для каждого сайта, который вы будете размещать, в папке / var / www .Это вновь созданное местоположение также называется корневым местоположением документа; вам нужно будет указать этот путь позже в файле конфигурации. Добавьте domain.com и domain2.com для своих доменных имен.

mkdir -p / var / www / domain.com / public_html

mkdir -p / var / www / domain2.com / public_html

Шаг 2: Установите права доступа к папке

Шаг 3. Настройка страницы индекса

Чтобы увидеть домашнюю страницу, убедитесь, что индекс index.html файл создается для каждого домена. В этом файле можно установить что-то простое, например, «тестирование для domain.com ».

vim / var / www / domain.com /public_html/index.html

Сохраните и выйдите, нажав кнопку Escape и набрав : wq

Повторите шаги для вашего второго домена, используя команда ниже.

vim / var / www / domain2.com /public_html/index.html

Шаг 4. Скопируйте файл конфигурации для каждого сайта

Скопируйте файл конфигурации по умолчанию для каждого сайта, это также обеспечит что у вас всегда есть копия по умолчанию для будущего создания сайта.

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/domain.com.conf

cp / etc / apache2 / sites-available / 000-default. conf /etc/apache2/sites-available/domain2.com.conf

Шаг 5. Отредактируйте файл конфигурации для каждого сайта

Как минимум, вы отрегулируете и добавите выделенные строки в < VirtualHost *: теги 80> и .

Примечание

ServerAlias ​​ - альтернативное имя для вашего домена, в этом случае и в большинстве случаев вы указываете www перед именем домена, чтобы люди могли просматривать сайт с www или без www ( ServerName ).

vim /etc/apache2/sites-available/domain.com.conf


ServerAdmin [email protected]
ServerName domain.com
ServerAlias ​​www.domain.com
DocumentRoot / var / www / domain.com / public_html
ErrorLog $ {APACHE_LOG_DIR} /error.log
CustomLog $ {APACHE_LOG_DIR} /access.log вместе

Выйти и сохранить с помощью : wq . Повторите этот процесс для файла domain2.com.conf , обязательно обновите ServerName , ServerAlias ​​ и DocumentRoot для второго домена.

Шаг 6. Включите файл конфигурации

По умолчанию ваш сервер настроен на чтение файла по умолчанию 000-default.conf . Но на предыдущем шаге мы создали новый файл конфигурации для каждого домена. Итак, нам нужно будет отключить файл по умолчанию.

a2dissite 000-default.conf Чтобы ваш сервер был сопоставлен с вашими доменами, вам необходимо включить каждый из ваших вновь созданных файлов .conf.

a2ensite domain2.com.conf

Мы перезапускаем службу Apache, чтобы зарегистрировать наши изменения.

systemctl restart apache2

Шаг 7: Проверка конфигураций Apache

После настройки любого из этих аспектов вы сможете посетить свой веб-сайт в браузере и просмотреть страницы index.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *