Это четвёртая статья из цикла про настройку LAMP на VPS.
Начало можно почитать >>ТУТ<< Предыдущая статья >>ТУТ<<
Шаг 1. Создаем пользователей для сайтов
Как и автор оригинальной статьи, я предпочитаю чтобы имя пользователя было аналогично домену сайта. Сервер настраивается по заказу конкретной фирмы, поэтому буду указывать конкретные сайты. 🙂
[root@www ~]# adduser spartaka19.ru
[root@www ~]# adduser cfg2.mihanik.net
Не забываем задать пользователям пароли.
[root@www ~]# passwd spartaka19.ru
[root@www ~]# passwd cfg2.mihanik.net
Далее создаем в каталогах пользователей дополнительные каталоги:
html (в котором будет основное содержимое сайтов)
log (в которую будут писаться логи) для этого сайта и выставляем права.
Права ставим: пользователю – полный доступ, группе apache чтение и список директорий, остальным – фикус.
Права можно выставить и руками, а можно и воспользоваться небольшим скриптиком:
cd /home
for dir in `ls -1 `; do
mkdir /home/$dir/log
mkdir /home/$dir/html
chown -R $dir:apache $dir
chmod ug+rX $dir
done;
ШАГ 2. Настраиваем веб сервер.
Правим /etc/httpd/conf/httpd.conf
[root@www ~]# mcedit /etc/httpd/conf/httpd.conf
Автор оригинального руководства правит модуль prefork… Мы пока его трогать не будем.
Подправим только строчку.
ServerAdmin admin@mihanik.net
И в конце файла добавим строчку
NameVirtualHost *:80
Это для того чтобы на одном ip адресе иметь много сайтов.
Теперь создадим файл, который будет показывать Apache по-умолчанию.
echo 'Это работает!!!' > /var/www/html/index.html
Проверим, что у нас действительно всё работает. Для этого перезапустим apache и проверим, что у нас отображается на странице.
[root@www ~]# systemctl restart httpd
И откроем наш адрес в браузере.
Всё отлично!
ШАГ 3. Настройка сайтов.
Далее переходим в директорию /etc/httpd/conf.d/ и настраиваем наши сайты.
[root@www ~]# cd /etc/httpd/conf.d/
Там можно удалить welcome.conf который выключает индексы и выдает вместо нее страничку «Apache 2 Test Page».
Следует учесть, что конфиги виртуальных хостов в этой директории применяются по очереди в алфавитном порядке.
Для того чтобы пользователь зайдя по IP-адресу на какой либо из наших сайтов не попал на совершенно другой (который будет первым по списку) в директорию conf.d стоит положить файл с именем например 000-default.conf.
[root@www conf.d]# touch 000-default.conf
[root@www conf.d]# mcedit 000-default.conf
И разместим в этом файле такое вот содержимое
<VirtualHost *:80>
ServerName localhost.local
DocumentRoot "/var/www/html"
</VirtualHost>
Теперь для нашего первого виртуального хоста создаём конфигурационный файл
[root@www conf.d]# touch 001-spartaka19.ru.conf
[root@www conf.d]# mcedit 001-spartaka19.ru.conf
Приводим файл к следующему виду
<VirtualHost *:80>
ServerName spartaka19.ru
ServerAlias www.spartaka19.ru
ServerAdmin webmaster@spartaka19.ru
ErrorLog "/home/spartaka19.ru/log/error.log"
CustomLog "/home/spartaka19.ru/log/access.log" combined
DocumentRoot "/home/spartaka19.ru/html"
<Directory "/home/spartaka19.ru/html">
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
Замечание!
- AllowOverride All — здесь сказано что если существует файл .htaccess, то все (All) директивы прописанные в нем выполнять. Кстати если не хотите чтоб сервер читал файл .htaccess то замените «All» на «None».
- Require all granted — доступ к сайту разрешен всем
В каталог сайта кладём индексный файл
echo 'Сайт spartaka19.RU' > /home/spartaka19.ru/html/index.html
Перезапускаем Apache и любуемся результатом
[root@www ~]# systemctl restart httpd
ШАГ 4. Настраиваем phpMyAdmin
По умолчанию phpMyAdmin доступен по пути /phpMyAdmin на всех наших сайтах.
Чтобы этого не было создаем специализированный сайт для управления (например cfg2.mihanik.net) и настраиваем его аналогично остальным.
Потом переносим все содержимое файла /etc/httpd/conf.d/phpMyAdmin.conf в конфиг этого сайта, а сам файл phpMyAdmin.conf удаляем или переносим куда-нибудь из дириктории conf.d.
После таких действий phpMyAdmin будет доступен по пути /phpMyAdmin/ только на специально выделенном сайте.
[root@www conf.d]# cp /etc/httpd/conf.d/phpMyAdmin.conf /etc/httpd/conf.d/002-cfg2.mihanik.net.conf
Причём, содержимое файла 002-cfg2.mihanik.net.conf нужно будет немного изменить.
В начало добавляем
<VirtualHost *:80>
ServerName cfg2.mihanik.net
ServerAdmin webmaster@cfg2.mihanik.net
ErrorLog "/home/cfg2.mihanik.net/log/error.log"
CustomLog "/home/cfg2.mihanik.net/log/access.log" combined
DocumentRoot "/home/cfg2.mihanik.net/html"
<Directory "/home/cfg2.mihanik.net/html">
Require all granted
AllowOverride All
</Directory>
И правим немного внутри, добавляя адреса, с которых можно подключаться к этому сайту. Естественно, в примере указаны «левые» адреса, но для объяснения они очень даже пригодятся. Т.е. приводим файл примерно к такому виду (жирным выделено то, что я добавил в файл)
# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL
<VirtualHost *:80>
ServerName cfg2.mihanik.net
ServerAdmin webmaster@cfg2.mihanik.net
ErrorLog "/home/cfg2.mihanik.net/log/error.log"
CustomLog "/home/cfg2.mihanik.net/log/access.log" combined
DocumentRoot "/home/cfg2.mihanik.net/html"
<Directory "/home/cfg2.mihanik.net/html">
Require all granted
Order allow,deny
Allow from all
</Directory>
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require ip 127.0.0.1
Require ip 84.42.29.15
Require ip 176.120.180.71
Require ip ::1
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
<Directory /usr/share/phpMyAdmin/setup/>
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require ip 127.0.0.1
Require ip 84.42.29.15
Require ip 176.120.180.71
Require ip ::1
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>
# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
Order Deny,Allow
Deny from All
Allow from None
</Directory>
<Directory /usr/share/phpMyAdmin/setup/lib/>
Order Deny,Allow
Deny from All
Allow from None
</Directory>
<Directory /usr/share/phpMyAdmin/setup/frames/>
Order Deny,Allow
Deny from All
Allow from None
</Directory>
# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc. This may break your mod_security implementation.
#
#<IfModule mod_security.c>
# <Directory /usr/share/phpMyAdmin/>
# SecRuleInheritance Off
# </Directory>
#</IfModule>
</VirtualHost>
Перезапускаем apache и проверяем результат работы.
[root@www conf.d]# systemctl restart httpd
Ура!!!
Работает.
ШАГ 5. Настраиваем vsftpd.
Часто заливать файлы на хостинг удобнее через фтп, для этого мы и установили vsftpd. Редактируем его конфиг /etc/vsftpd/vsftpd.conf , выключаем анонимный логин, меняем
anonymous_enable=YES
на
anonymous_enable=NO
Также раскоментируем
chroot_local_user=YES
И сразу после этой строки добавляем
allow_writeable_chroot=YES
Причина добавления строки описана тут: http://agapoff.name/vsftpd-oops.html
Теперь чтобы можно было зайти на фтп определенного сайта соответствующему пользователю нужно задать пароль. Но у нас это было сделано ранее.
Включаем и запускаем vsftpd
systemctl enable vsftpd.service
systemctl start vsftpd.service
Замечание! С указанными выше настройками iptables нужно подключаться к серверу в активном режиме. 🙂
Проверяем, все ли работает.