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

Description: Прочии темы
Moderator: Aleksandr

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Posts: 1613
Joined: 5 Apr 2013
With us: 11 years 8 months

#1by Дим » 26 Feb 2014, 13:59

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

1. В каталог /etc/apache2/sites-available нужно добавить пустой файл с произвольным именем. Для удобства, лучше давать имя файла, содержащее имя виртуального хоста. Например, если планируется добавить виртуальный хост с именем sampawno.ru, надо задать имя файла sampawno.ru.conf

2. В этот файл надо вписать (примерно) следующее:
<VirtualHost *:80>

ServerName sampawno.ru
ServerAlias www.sampawno.ru

DocumentRoot "/var/www/sampawno"

<Directory "/var/www/sampawno">
allow from all
Options +Indexes
</Directory>

</VirtualHost>

Где:

  • ServerName, ServerAlias - это URL, набираемый в браузере, на который должен откликаться данный виртуальный хост;
  • DocumentRoot - это корневая директория данного виртуального хоста;
  • Секция Directory - настройка прав доступа к указанной директории. В данном случае настраиваются права доступа к корневой директории виртуального хоста.

Нужно обратить внимание на параметр секции VirtualHost. Здесь он написан как "*:80". Но обязательно нужно заглянуть в файл /etc/apache2/sites-available/default и посмотреть, какой параметр написан там в такой же секции VirtualHost. Если написано "*", то в нашем файле надо так же написать "*".
Другими словами, нужно заглянуть в файл /etc/apache2/ports.conf. Там нужно найти директиву NameVirtualHost *:80
Какое значение стоит в этой директиве (здесь - "*:80"), такое значение и нужно прописать в качестве параметра секции VirtualHost во всех файлах директории /etc/apache2/sites-available, иначе хосты видны не будут.

Частая ошибка - когда в /etc/apache2/ports.conf прописано "*.80", а в файле хоста в секции VirtualHost прописано "*". Несмотря на то, что маска "*" покрывает маску "*.80", сервер Apache не понимает такой записи. При такой настройке, сервер Apache не найдет нужного хоста!

3. Надо перейти в каталог /etc/apache2/sites-enabled и создать там символическую ссылку на созданный нами файл:

Code: Select all

cd /etc/apache2/sites-enabled
ln 
-/etc/apache2/sites-available/sampawno.ru.conf sampawno.ru.conf


4. Открываем файл /etc/hosts и прописать там новую строку следующего содержания:

Code: Select all

127.0.0.1 sampawno.ru

это позволит браузеру обращаться локально к Апачу, а не искать данный сайт в интернете.

5. Перезапустить Apache:

Code: Select all

sudo /etc/init.d/apache2 restart


Все, конфигурирование закончено. Можно в браузере набрать URL http://sampawno.ru/index.html, и должен открыться файл /var/www/sampawno/index.html (если он есть). Таким образом, сразу видно, что виртуальный хост создался, и отображается в браузере. Подобным образом добавляются и другие виртуальные хосты.
[center]i love you [s]mxIni[/s] Mysql[/center]


Layk M
Прапорщик
Прапорщик
Avatar
Layk M
Прапорщик
Прапорщик
Posts: 168
Joined: 4 Jun 2013
With us: 11 years 6 months

#2by Layk » 20 Apr 2014, 16:28

Image

Итак, уважаемый читатель, сегодня мы займемся непосредственно установкой и настройкой Apache + PHP + MySQL в Ubuntu.

Установка Apache

В Терминале необходимо выполнить команду:
sudo apt-get install apache2 libapache-mod-auth-mysql

Команда apt-get install запускает менеджер пакетов в режиме установки нового ПО.
Через пробел следуют названия устанавливаемого ПО: apache2 libapache-mod-auth-mysql — самого Apache и дополнительного модуля.
Вот и все, Apache установлен. За это я и люблю Ubuntu, не надо искать и скачивать дистрибутивы, процесс приятно автоматизирован.
Устанавливаем PHP

Все, что необходимо для работы PHP можно установить одной командой:
sudo apt-get install php5-common php5 libapache2-mod-php5 php5-cli php5-cgi php5-mysql
Устанавливаем MySQL

Команда для установки:
sudo apt-get install mysql-server mysql-client
После установки MySQL потребует задать пароль пользователя root для подключения к базам данных.

Image

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

Для начала создадим каталог на жестком диске, где будут располагаться файлы сайтов. Например, пусть это будет папка /home/imya_polzovatelya/sites.
В директории sites я буду располагать поддиректории с файлами отдельных сайтов. Каждая поддиректория в sites будет представлять из себя хранилище файлов отдельного сайта.
В качестве примера настроим работу тестового сайта.
Для этого в каталоге sites я создаю каталог test, содержащий две поддиректории: logs — для хранения логов и www — для хранения файлов сайта.
Пару слов о том, что же такое логи. В ОС семейства Linux принято писать подробные и человекопонятные отчеты об ошибках. В случае возникновения непредвиденной ситуации Apache запишет в папку logs отчет из которого вы сможете понять, что именно пошло не так. Советую не забывать о полезности чтения логов.

Image

На скрине представлен внешний вид замечательного файлового менеджера ОС семейства Linux под названием Midnight Commander. Запустить его можно набрав в терминале комаду mc.
Теперь в папке www свежесозданного хранилища файлов сайта test необходимо создать текстовый файл index.php. В Midnight Commander для создания текстового файла можно воспользоваться комбинацией клавиш Shift + F4.
В файле index.php, для проверки, напишем следующие сроки:
<p>Привет, Мир!</p>
<?php echo phpinfo() ?>
Первая строка приведенного выше кода выводит на экран статический текст Привет, Мир! Вторая строка предназначена для проверки работоспособности PHP: если все в порядке функция phpinfo() выведет таблицу с информацией о версии PHP, установленной на сервере.
Настройка Apache

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

У каталогов и файлов ОС, построенной на базе Linux, существует три степени доступа для трех категорий пользователей.
Сначала познакомимся с существующими категориями пользователей.
1. Категория владелец файла или каталога. В нашем случае, при создании каталога sites, test, www, logs и файла index.php, мы действовали от имени пользователя, под которым вошли в операционную систему.
Увидеть имя пользователя, под которым вы сейчас работаете, можно в окне Терминала.

Image

На приведенном скриншоте имя пользователя olga.
Владельцем, созданных в сеансе активности пользователя olga каталогов и файлов, будет назначен пользователь olga.[INDENT]Запустив файловый менеджер Midnight Commander в режиме суперпользователя командой sudo mc, вы получите доступ к работе со служебными файлами и каталогами. Однако, владельцем созданных файлов и каталогов в режиме суперпользователя будет назначен уже не пользователь olga, а суперпользователь root.
[/INDENT]
Работа в режиме суперпользователя идентифицируется знаком # в конце командной строки, в отличии от знака $ при работе в обычном режиме.

Image

2. Следующая категория — группа владельца. Дело в том, что все пользователи ОС Linux распределены по группам. Рассматриваемая категория доступа относится к пользователям, входящим в туже группу, что и владелец.
3. Третья категория носит название все остальные. В данную категорию входят пользователи не попавшие в первую и вторую категории.
Для каждой из вышеописанных категорий пользователей может быть назначен свой уровень доступа к каталогам и файлам. Увидеть и отредактировать его можно, кликнув правой мышкой на папке или файле и выбрав пункт Свойства.

Image

Но гораздо приятнее, лично для меня, воспользоваться Терминалом и посмотреть информацию о правах доступа посредством команды
ls -la put`_k_papke_ili_failu.

Image

Выделенная на рисунке строка предоставляет полную информацию о правах доступа к папке test, которая расположена в каталоге /home/olga/sites/.
Расшифрую выделенную на скриншоте строку:
первая буква d информирует нам о том, что test — это директория;
rwxr-xr-x — обозначение степени доступа по три символа для каждой категории пользователей.
Теперь начинаем разбираться со степенями доступа.
В случае анализа прав доступа к директории первые три символа приведенной буквеннодефисной последовательности (rwx) характеризуют степень доступа категории владелец и означают следующее: категория владелец имеет право просматривать содержимое директории test (символ r), создавать новые файлы и подкаталоги в данной директории (w), переходить в директорию test (x).
В случае анализа прав доступа для файла: r — чтение файла, w — запись в файл, x — запуск файла.
Следующие три символа r-x характеризуют права одногруппников владельца на данную директорию. Символы r-x означают, что читать и переходить в данный каталог одногруппники владельца могут, но писать туда им запрещено, т. к. вместо w стоит прочерк.
Для всех остальных пользователей назначены точно такие же права, что и для одногруппников.
Теперь внимание! С данными файлами будет работать программа Apache. Возникает законный вопрос — от имени какого пользователя работает Apache и какие права нужно установить на файлы и директории сайта, чтобы было безопасно и все работало.
Ответ на этот вопрос можно найти в файле конфигурации Apache: /etc/apache2/apache2.conf. Параметры User и Group задают пользователя и группу, от имени которых будет действовать Apache.

Image

Значение переменных ${APACHE_RUN_USER} и ${APACHE_RUN_GROUP} указаны в файле /etc/apache2/envvars:

Image

Из скриншота видно, что Apache будет работать от имени пользователя www-data, состоящего в группе www-data.
Для нашего сайта test, владельцем папок и фалов которого является пользователь olga, www-data будет относится к третей категории пользователей, а именно все остальные.
Но позвольте, ведь частенько возникает необходимость давать полный доступ (rwx) пользователю, от имени которого работает Apache, к файлам и папкам сайта. А значит нам потребуется выдать полный доступ третей категории пользователей (всем подряд), чего делать совершенно не хочется из соображений безопасности.
Поэтому я предлагаю пойти другим путем. Добавим пользователя www-data к группе владельца файлов и папок сайта.
Для начала проверим, какая группа у владельца сайта. Воспользуемся командой ls -la:

Image

Как видно из скриншота, группа владельца каталога с файлами сайта носит название olga.
Остается добавить пользователя www-data в группу olga. Сделать это можно командой:
sudo usermod -a -G olga www-data
Воспользуемся командой для просмотра групп пользователя, чтобы убедиться в успехе проделанной операции:
groups www-data

Image

Теперь необходимо задать права для каталогов и файлов нашего сайта исходя из следующих соображений:
Владелец должен иметь возможность полного доступа к файлам и каталогам сайта (rwx). Действительно, мне же нужно создавать новые файлы сайта и редактировать существующие без всяких на то ограничений. Напомню, в ОС я работаю от имени пользователя olga.
Одногруппники, одним из которых является пользователь www-data, от чьего имени работает Apache, должны иметь возможность просматривать содержимое каталогов и файлов, а также запускать файлы (r-x). Однако, нужно иметь ввиду, что для некоторых папок сайта (например, тех куда Apache записывает новые файлы) требуются полные права (rwx).
Категории пользователей все остальные можно вообще не давать никаких прав (—).
Реализуем задуманное следующими командами:
sudo chmod -R 750 /home/olga/sites/
Данная команда дает полный доступ (rwx) для владельца директории sites (7), доступ на чтение и запуск (r-x) одногруппникам владельца (5) и запрещает доступ всем остальным (0 в конце).
Ключ -R говорит о том, что выполнить операцию смены прав доступа нужно рекурсивно, т. е. для всех файлов и подкаталогов внутри директории sites и для нее самой.
С правами доступа почти все Image
Займемся непосредственно настройкой Apache.
В Ubuntu существует некая особенность в настройке нового сайта. Конфигурационный файл для каждого из сайтов, запускаемых с нашего компьютера, должен быть свой. Хранятся они в папке /etc/apache2/sites-available.

Image

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

Code: Select all

 <VirtualHost *:80>
 
ServerName test
# ServerAlias example.com
 
ServerAdmin webmaster@example.com 
  DocumentRoot 
/home/olga/sites/test/www
 
<Directory /home/olga/sites/test/www>
Options -Indexes FollowSymLinks MultiViews
 AllowOverride All
 Order allow
,deny
 allow from all
 
</Directory
  
ErrorLog /home//olga/sites/test/logs/error.log 
  
LogLevel warn 
  ServerSignature On 
 
</VirtualHost


В первой строке указывается доменное имя, по которому данный сайт будет доступен.
Вторая строка — это синоним доменного имени, по которому осуществляется доступ к этому же сайту. В моем случае она закомментирована символом # и в настройках не участвует.
Ниже указывается адрес эл. почты администратора.
Далее мы переходим к настройкам правил работы Apache с файлами сайта, расположенными в каталоге /home/olga/sites/test/www
Строка с директивами Options -Indexes FollowSymLinks MultiViews задает опции работы Apache с указанной директорией:
-Indexes — запрещает показ в бразуере содержимого каталогов в случае отсутствия запрашиваемого файла.
FollowSymLinks MultiViews — разрешения следовать по символическим ссылкам и разрешает поддержку многих языков (пусть будет, хуже не станет).
AllowOverride All разрешает использовать файлы дополнительной конфигурации .htaccess.
Следующий далее набор директив разрешает доступ к файлам сайта.
ErrorLog /home/olga/sites/test/logs/error.log — задает путь к файлу логов ошибок.

Скопируем содержимое файла шаблонной конфигурации и сохраним под именем нашего сайта, чтобы не путаться (в примере сайт называется test).
Для выполнения описанного действия удобно использовать Midnight Commander, запустив его в режиме суперпользователя, т. к. мы будем заниматься редактированием служебных файлов (команда sudo mc).
Копирование содержимого одного файла в другой осуществляется комбинацией клавиш Shif+F5.

Image

Далее необходимо воспользоваться командой подключения файла конфигурации хоста test:
a2ensite test
Данная команда создаст ссылку на файл конфигурации
Кстати, отключить надоевший хост можно командой:
a2dissite test
Теперь нам осталось выполнить всего два действия:
Перезапустить Apache командой /etc/init.d/apache2 restart и добавить название нашего свежеиспеченного хоста в файл /etc/hosts и перенаправление на IP-адрес 127.0.0.1
После перезапуска Apache в каталоге /home/olga/sites/test/logs/ создастся файл лога ошибок error.log. Владельцем данного файла будет являться суперпользователь root. Поэтому, чтобы у нас была возможность просматривать его содержимое нужно расширить права доступа третей категории пользователей разрешив им чтение данного файла (r—), ведь я работаю от имени пользователя olga и файлы пользователя root без соответствующего разрешения прочесть не смогу:
sudo chmod -R 774 /home/olga/sites/test/logs/error.log
774 – означает:


  • root может читать, писать и запускать;
  • одногруппники могут читать, писать и запускать;
  • все остальные – только читать.
Вот и все, теперь можно запускать браузер, вводить URL http://test и наблюдать содержимое файла index.php, обработанного Apache.
P.S.: для работы большинства современных сайтов требуется модуль mod_rewrite. По умолчанию он не подключен. Подключить его можно командой:
a2enmod rewrite
По аналогии можно подключить и другие недостающие модули.
Image


  • Similar Topics
    Replies
    Views
    Last post

Return to “Прочее”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest