Apache виртуальные хосты – Как правильно настроить права для apache когда виртуальные хосты располагаются в домашней папке?

Содержание

Проблема с виртуальными хостами для поддоменов в Apache? — Хабр Q&A

Структура каталогов такая:
/var/www/test.ru
/var/www/test.ru/httpd
/var/www/test.ru/forum
/var/www/test.ru/media

В папке "httpd" находится сам сайт домена, а в папке "forum" соответственно сам поддомен "forum.test.ru".
Файл hosts:

127.0.0.1       localhost
127.0.1.1       WS01
127.0.0.1       test.ru
127.0.0.1       forum.test.ru
127.0.0.1       media.test.ru

Ну и файл /etc/apache2/sites-available/test.ru.conf

<VirtualHost *:80>

        ServerAdmin [email protected]
        DocumentRoot /var/www/test.ru/httpd
        ServerName test.ru
        ServerAlias www.test.ru

        <Directory /var/www/test.ru/httpd>
           Options Indexes FollowSymlinks
           AllowOverride All
           Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

<VirtualHost *:80>

        ServerAdmin [email protected]
        DocumentRoot /var/www/test.ru/forum
        ServerName forum.test.ru
        ServerAlias www.forum.test.ru

        <Directory /var/www/test.ru/forum>
           Options Indexes FollowSymlinks
           AllowOverride All
           Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
<VirtualHost *:80>

        ServerAdmin [email protected]
        DocumentRoot /var/www/test.ru/media
        ServerName media.test.ru
        ServerAlias www.media.test.ru

        <Directory /var/www/test.ru/media>
           Options Indexes FollowSymlinks
           AllowOverride All
           Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

При попытке добавить для "media" еще одну секцию и добавлении 127.0.0.1 с параметром "media.test.ru" в файл hosts, апач ругается на то, что ему не нравится VirtualHost. Подскажите где я накосячил?

Set virtual hosts on linux apache and nginx

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

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

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

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

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

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

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

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

sudo apt-get update
sudo apt-get install apache2

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

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

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

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

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

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

Наш document root (корневой каталог – директория верхнего уровня, которую просматривает Apache в поисках контента для отображения) будет настроен на использование директорий внутри директории /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-документ, который показывает, к какому сайту он относится. Наш файл выглядит следующим образом:

<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h2>Success!  The example.com virtual host is working!</h2>
  </body>
</html>

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

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

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

После этого вы можете открыть файл и исправить его содержимое:

nano /var/www/test.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body>
    <h2>Success!  The test.com virtual host is working!</h2>
  </body>
</html>

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

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

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

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

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

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

<VirtualHost *:80>
    ServerAdmin [email protected]
    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

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

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

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

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

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

sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

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

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

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

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Сохраните и закройте файл после внесения правок.

Шаг 5.1 – Включение новых виртуальных хостов Apache

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

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

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

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

sudo service apache2 restart

Скорее всего, вы получите сообщение, похожее на это:

 * Restarting web server apache2
 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

Это сообщение безобидно и не влияет на наш сайт.

If you have installed the nginx package from the Ubuntu repositories, you will have two directories.

/etc/nginx/sites-enabled and /etc/nginx/sites-available.

In the main nginx configuration, /etc/nginx/nginx.conf, you have the following line:

include /etc/nginx/sites-enabled/*.conf;

So basically to list all available virtualhosts, you can run the following command:

ls /etc/nginx/sites-available

To activate one of them, run the following command:

ln -s /etc/nginx/sites-available/www.example.org.conf /etc/nginx/sites-enabled/

The scripts that comes with Apache is basically just simple shell wrappers that does something similar as above.

After linking the files, remember to run sudo service nginx reload/ service nginx reload

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

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

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

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

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

sudo nano /etc/hosts

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

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

127.0.0.1   localhost
127.0.1.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

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

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

Шаг 7 – Тестирование результатов

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

http://example.com

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

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

vhosts.conf | конфигурирование Apache для поддержки виртуальных хостов

Apache — виртуальные хосты

httpd-vhosts.conf — создание виртуальных хостов

Концепция виртуальных хостов позволяет создавать, конфигурировать и обслуживать на одном (физическом) веб-сервере Apache множество сайтов.
Виртуальный хост может быть:
«привязанным к IP-адресу»используется отдельный IP-адрес для каждого сайта
или
«привязанным к имени»один IP-адрес для множества сайтов с различными именами.

Термин Виртуальный — якобы существующий, получил распространение в конце 80-х годов. Компьютеры того времени не имели жестких дисков и при включении могли только подвести считывающую головку дисковода к первой дорожке гибкого диска. В начале работы, с пятидюймового системного диска емкостью 256 Кб загружались в память основные компоненты операционной системы (OS-DOS). Затем, с другой дискеты, программное обеспечение, например, Бейсик. Созданная на нем программа записывалась на гибкий диск. Для её исполнения необходимо было загрузить в память интерпретатор Бейсика. То есть, постоянно работал дисковод, приходилось менять гибкие диски, что занимало много времени.
На определенном этапе, с увеличением емкости памяти, появилась возможность часть её выделять и присваивать имя. В эту, именованную, допустим, как диск N, область памяти (получившую название - виртуальный диск), переписывалось нужное программное обеспечение. Отпадала необходимость постоянно обращаться к гибким дискам, что в десятки раз увеличивало производительность работы.

Хост (жарг. host - хозяин) — в обычном понимании любой компьютер, сервер, подключённый к локальной или глобальной сети.

Веб-узел — каждый подключенный к Интернету компьютер, независимо от выполняемых функций (сервер, компьютер клиента, DNS и FTP-сервер и т. д.) — имеет свой уникальный IP-адрес. Иначе обмен информацией - невозможен.

При включении модема, маршрутизатора интернет-провайдер выделит, для входа в сеть Интернет с вашего компьютера, динамический (временный) IP - адрес (ай-пи-адрес).

, в 07 час. 36 мин. 27 сек. вам выделен IP — 176.9.44.166

  Узел - это адрес. Любой узел является хостом

  Например:  
Сайт avege.ru
IP сайта 88.212.253.127
Ваш IP 176.9.44.166 Определить ваш IP
протокол сервера HTTP/1.1

Вы пришли на сайт — avege.ru
и получили с сервера с IP-адресом — 88.212.253.127
на ваш компьютер с IP — 176.9.44.166
страницу — (none) (см. адресную строку браузера).

После получения у интернет-провайдера IP - адреса и установки канала связи, происходит преобразование имени сайта, портала, сервера, например — vk.com (ВКонтакте), в понятный для компьютера его полный адрес IP, имеющий вид — 87.240.165.80
Служба Internet выполняющая эту операцию, называется службой имен доменов — службой DNS (Domain Name System - система доменных имён).
Компьютеры, обеспечивающие выполнение программ этой службы, называются серверами имен доменов - серверами DNS (Domain Name Servers).
DNS используется для обозначения обоих понятий - службы и серверов имён доменов.

Администратор: Командная строка

Microsoft Windows [Version 10.0.14393]
(c) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены.

C:\Windows\system32>ping vk.com

Обмен пакетами с vk.com [87.240.165.80] с 32 байтами данных:
Ответ от 87.240.165.80: число байт=32 время=32мс TTL=58
Ответ от 87.240.165.80: число байт=32 время=32мс TTL=58
Ответ от 87.240.165.80: число байт=32 время=32мс TTL=58
Ответ от 87.240.165.80: число байт=32 время=33мс TTL=58

Статистика Ping для 87.240.165.80:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 32мсек, Максимальное = 33 мсек, Среднее = 32 мсек

C:\Windows\system32>

HTTP-сервер социальной сети ВКонтакте имеет выделенный IP-адрес — 87.240.165.80.


На предыдущей странице, в файл конфигурации для настройки каталогов пользователей — httpd-userdir.conf, были внесены изменения - определён каталог для виртуальных хостов (сайтов пользователей) — UserDir "www/docs".

Далее, в конфигурационном файле httpd-vhosts.conf нужно, в секции (секциях) VirtualHost, изменить несколько директив для вашего сайта (сайтов).

В начале внесите в файл httpd-vhosts.conf изменения для одного сайта

Для примера, можно временно назвать сайт — namesite.ru. — Это имя (доменное имя) одного из разрабатываемых или отлаживаемых сайтов на сервере Apache, которое, после полной настройки сервера Apache, легко будет заменить на выбранное вами.
При обращении к любому сайту по имени - //www.имя-сайта.ru/, будет выведена индексная страница - index.html

Создайте на диске "C:\" папку www, в ней каталог - docs (C:/www/docs/)
В нём три подкаталога:
  1. logs (C:/www/docs/logs/)
    • namesite.ru-access.log — пустой файл
    • namesite.ru-error.log     — пустой файл
  2. cgi-bin (C:/www/docs/cgi-bin/)
  3. namesite.ru (C:/www/docs/namesite.ru/)
    • index.htmlиндексная страница сайта
    • папки и файлы страниц сайта