LAMP на VPS. Настройка основного ПО.

Это четвёртая статья из цикла про настройку 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 нужно подключаться к серверу в активном режиме. 🙂

Проверяем, все ли работает.